-
Afisarea lunilor nu este de loc o problema dificila, de asta si modurile de rezolvare nu sunt mereu eficiente.
In primul rand avem nevoie de luna, sa zicem luna curenta folosind functia date():
1// preia timestampul curent 2$timestamp = time(); 3 4// afisaza luna in numere de la 1 la 12 5echo date('n', $timestamp); 6// in cazul curent va afisa "3"
Evident este inutila variabila $timestamp pentru ca acesta este oricum implicit data curenta, dar am zis sa fie mai clar.
Daca se dorea afisarea numelui lunii curente in engleza se poate folosi:
1echo date('F', $timestamp); 2// in cazul curent va afisa "March"
Acum vine dilema, cel mai “sanatos” dupa parerea mea este crearea unei functii separate.
Cazul cel mai nefericit este:
1function getLuna($luna) { 2 $ret = ''; 3 if($luna==1) { 4 $ret = 'Ianuarie'; 5 } elseif($luna==2) { 6 $ret = 'Februarie'; 7 } elseif($luna==3) { 8 $ret = 'Martie'; 9 } elseif($luna==4) { 10 $ret = 'Aprilie'; 11 } elseif($luna==5) { 12 $ret = 'Mai'; 13 } elseif($luna==6) { 14 $ret = 'Iunie'; 15 } elseif($luna==7) { 16 $ret = 'Iulie'; 17 } elseif($luna==8) { 18 $ret = 'August'; 19 } elseif($luna==9) { 20 $ret = 'Septembrie'; 21 } elseif($luna==10) { 22 $ret = 'Octombrie'; 23 } elseif($luna==11) { 24 $ret = 'Noiembrie'; 25 } elseif($luna==12) { 26 $ret = 'Decembrie'; 27 } 28 29 return $ret; 30}
Spun ca este cel mai “nefericit” pentru ca in luna decembrie vor fi executate 12 operatii if, evident nu o sa crape serverul dar il va incetinii, iar cu cat aceasta functie este apelata mai des, cu atat serverul va fi mai afectat.
Varianta numarul 2, o abordare mai usoara:
1function getLuna($luna) { 2 $ret = ''; 3 4 switch($luna) { 5 case 1: 6 $ret = 'Ianuarie'; 7 break; 8 case 2: 9 $ret = 'Februarie'; 10 break; 11 case 3: 12 $ret = 'Martie'; 13 break; 14 case 4: 15 $ret = 'Aprilie'; 16 break; 17 case 5: 18 $ret = 'Mai'; 19 break; 20 case 6: 21 $ret = 'Iunie'; 22 break; 23 case 7: 24 $ret = 'Iulie'; 25 break; 26 case 8: 27 $ret = 'August'; 28 break; 29 case 9: 30 $ret = 'Septembrie'; 31 break; 32 case 10: 33 $ret = 'Octombrie'; 34 break; 35 case 11: 36 $ret = 'Noiembrie'; 37 break; 38 case 12: 39 $ret = 'Decembrie'; 40 break; 41 42 } 43 return $ret; 44}
Aceasta varianta este putin mai buna pentru ca foloseste un singur swith fata de 12 if-uri imbricate. Aceasta varianta mi se pare una care este relativ suficient de frumos scrisa, dar… se poate si mai bine.
Varianta 3, o abordare simpla si concisa:
1function getLuna($luna) { 2 $luni = array( 3 '', 4 'Ianuarie', 5 'Februarie', 6 'Martie', 7 'Aprilie', 8 'Mai', 9 'Iunie', 10 'Iulie', 11 'August', 12 'Septembrie', 13 'Octombrie', 14 'Noiembrie', 15 'Decembrie', 16 ); 17 18 return $luni[$luna]; 19}
Mult mai putin scris, mult mai putina batai de cap si dupa parerea mea mult mai usor de inteles. Am vrut sa scriu acest post incare de acum cateva luni cand am gasit intr-o bucata de cod prima abordare (cu if-uri) si in afara de faptul ca este slaba ca performanta este si greu de citit.
M-am folosit de aceasta functie de afisare a lunii pentru a pune in evidenta aceste 3 abordari, dar sunt multe pasaje de cod care merita revizuite pentru a se folosi o astfel de abordare.