Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    (odioso) Switch case che non funziona per alcuni elementi

    Salve, ho il seguente codice:

    Codice PHP:
    Switch ($mese
     {  
      case 
    01$nomemese 'Gennaio'; break;
      case 
    02$nomemese 'Febbraio'; break;
      case 
    03$nomemese 'Marzo'; break; 
      case 
    04$nomemese 'Aprile'; break;
      case 
    05$nomemese 'Maggio'; break;
      case 
    06$nomemese 'Giugno'; break;  
      case 
    07$nomemese 'Luglio'; break;  
      case 
    08$nomemese 'Agosto'; break;
      case 
    09$nomemese 'Settembre'; break;
      case 
    10$nomemese 'Ottobre'; break;
      case 
    11$nomemese 'Novembre'; break;
      case 
    12$nomemese 'Dicembre'; break;
     } 
    Questo funziona correttamente per tutti i valori di $mese indicati ESCLUSI lo 08 e 09; in pratica $nomemese rimane nullo se $mese è = 08 o =09. Come mai questo errore assurdo?

  2. #2
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    togliendo lo zero funzionano tutti i mesi, senza solo lo 09 non funziona. un'altro sistema potrebbe essere:

    codice:
    $mese=8;
    setlocale(LC_TIME,"IT");
    $nomemese=strftime("%B",mktime(1,1,1,$mese,1,2004));
    think simple think ringo

  3. #3
    oppure si utilizzano gli array...

    $mesi_ita = array('','Gennaio','Febbraio','..');


  4. #4
    Ottengo la data in questo modo:

    Codice PHP:
    $data=explode('-',$DataOrigine);

    $anno $data[0];
    $mese $data[1];
    $giorno $data[2]; 
    setlocale(LC_TIME,"IT");
    $nomemese=strftime("%B",mktime(1,1,1,$mese,1,2004) );

    Vale per qualsiasi data, anche per quella non corrente quindi?

  5. #5
    x la non corrente vai di array...

  6. #6
    Moderatore di Server Apache L'avatar di marketto
    Registrato dal
    Sep 2001
    Messaggi
    5,858
    Originariamente inviato da matsoftware
    setlocale(LC_TIME,"IT");
    $nomemese=strftime("%B",mktime(1,1,1,$mese,1,2004) );

    Vale per qualsiasi data, anche per quella non corrente quindi?
    si, il mktime serve appunto per generare l'unix timestamp usato da strftime.
    think simple think ringo

  7. #7
    Ho tagliato la testa al toro; nella variabile della data ho messo 8 al posto di 08 ed il mio codice vive felice e contento

  8. #8
    Ovviamente negli switch case ho tolto gli 0

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2003
    Messaggi
    534
    Il problema dello 08 - 09 è comune a tutte le gestioni di php. La numerazione che inizia per 0 è per default in ottale, per le cifre decimali da 1 a 9. Quindi un numero 08 - 09 è anomalo, perchè richiama la numerazione ottale ma è fuori range.
    Viene considerato 00. Se provi con mktime vedrai che con 08 - 09 nei mesi o nei giorni richiamerà l'ultimo valore dell'anno oppure del mese precedente. Come se ci fosse un 00.

    Devi usare il numero senza lo zero davanti. Teoricamente anche per gli altri mesi, anche se 01 - 07 corrispondono sia in ottale che in decimale.


Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.