Noms des mois en php
Par Marie Sauvage le mercredi, juillet 19 2006, 15:50 - Geek - Lien permanent
Toi le programmeur PHP qui, comme moi, t'embête à faire un long et fastidieux tableau à chaque fois que tu veux gérer des dates et leur affichage, oui toi qui écris à la main quelque chose d'horrible et ennuyeux qui ressemble à cela :
$mois['01']='Janvier'; $mois['02']='Février'; $mois['03']='Mars'; $mois['04']='Avril'; $mois['05']='Mai'; $mois['06']='Juin'; $mois['07']='Juillet'; $mois['08']='Aout'; $mois['09']='Septembre'; $mois['10']='Octobre'; $mois['11']='Novembre'; $mois['12']='Décembre';
Je viens aujourd'hui pour te libérer et te faire part de ma trouvaille :o
for($i=1;$i<=12;$i++)
{ $mois[$i]=date("F", mktime(0, 0, 0, $i, 1, 2005)); }
Voila, c'est tout... mais ça soulage 8~
Ici ça récupère le nom complet et en anglais mais on peut s'amuser à récupérer un peu tout ce qu'on veut (numéro, nom abrégé, etc.) sur le même modèle, en suivant la doc de la fonction date :) Par exemple pour un tableau similaire au premier :
for($i=1;$i<=12;$i++) { $mois_num=date("m", mktime(0, 0, 0, $i, 1, 2005)); $mois_nom=date("F", mktime(0, 0, 0, $i, 1, 2005)); $mois[$mois_num]=$mois_nom; }
Et toi, programmeur PHP qui utilisais déjà quelque chose du genre... épargne-moi donc tes sarcasmes, tu seras gentil :D
Edit - Les noms en Français
Afin de faciliter la vie à vos visiteurs, il peut être préférable d'avoir les noms des mois dans leur langue, voila donc la version pour avoir les noms en français :
setlocale(LC_TIME,"fr"); for($i=1;$i<=12;$i++) { $mois[$i]=strftime("%B", mktime(0, 0, 0, $i, 1, 2005)); }
pour plus d'information sur les locales (en fonction de votre système par exemple) référez-vous à la documentation de setlocale
Edit 2 - Complément sur les locales
Vous aurez certainement lu la doc jusqu'au bout et donc ne serez pas tombé dans le piège dans lequel je suis tombée :)
Mais bon, au cas où, voici un petit complément utile :8
Il se peut que d'un serveur à l'autre la chaine à utiliser ne soit pas la même, ce qui pose des problèmes lorsqu'on travaille en local puis qu'on uploade le script : pouf, setlocale ne fonctionne plus :/
En fait si ! Mais l'un prend "fr" lorsque l'autre prend "fr_FR" :grmpf:
Heureusement PHP 4.3.0 est arrivé B)
Et depuis son arrivée, on peut spécifier plusieurs chaines à tester et ainsi avoir une ligne de commande unique, quel que soit le serveur :
setlocale(LC_TIME, "fr", "french", "fra", "fr_FR", "fr_FR@euro");
Le serveur prend alors la première qu'il reconnait... Petite comparaison entre mon serveur local et mon hébergeur :
Serveur local : Windows - Apache 2 - PHP 5.0.4
locale retournée par la fonction : French_France.1252
fr -> oui
fr_FR -> non
fr_FR@euro -> non (logique)
fra -> oui
french -> oui
Hébergeur : Linux - Apache 1 - PHP 4.3.10
Locale retournée par la fonction : la chaine prise en compte par la fonction ("fr", "french", etc.)
fr -> non
fr_FR -> oui
fr_FR@euro ->oui (logique)
fra -> non
french -> oui