Récupérer une date en français via un array

Résolu/Fermé
Djess - 16 sept. 2013 à 17:53
 Utilisateur anonyme - 16 sept. 2013 à 23:29
Bonjour,

Bon, c'est pas dans mes habitudes de solliciter de l'aide, mais là, je sèche.
Le but pour moi est de récupérer une date (depuis un format date) en français.

Pour cela je passe par la méthode array(nom en français) avec :
$mois_fr = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");

Du coup je dois récupérer le n° du mois dans ma bdd avec :
$req = $bdd->prepare('SELECT *,DATE_FORMAT(jma, "%w") AS jour_sem, DATE_FORMAT(jma, "%d") AS jour, DATE_FORMAT(jma, "%n") AS mois, DATE_FORMAT(jma, "%Y") AS annee FROM heures WHERE id_client = ? ORDER BY jma DESC');
$req->execute(array($_SESSION['id_c']));
while($data_h = $req->fetch())
{ echo $data_h['mois'] . '<br/>';
}

Premier problème, ce code me retourne :
n
n
n
n
n

OK, donc visiblement je ne recupère pas le bon fomat avec
DATE_FORMAT(jma, "%n") AS mois
. J'essaie donc avec %m (un 0 initial en plus donc).
Là, le n° du mois est bien récupéré, mais ... c'est l'utilisation de l'array cité en haut qui ne fonctionne plus.

Un simple test :
echo $mois_fr[01] . '<br />';
echo $mois_fr[02] . '<br />';
echo $mois_fr[03] . '<br />';
echo $mois_fr[04] . '<br />';
echo $mois_fr[05] . '<br />';
echo $mois_fr[06] . '<br />';
echo $mois_fr[07] . '<br />';
echo $mois_fr[08] . '<br />';
echo $mois_fr[09] . '<br />';
echo $mois_fr[10] . '<br />';
echo $mois_fr[11] . '<br />';
echo $mois_fr[12] . '<br />';
me renvoie :
Janvier
Février
Mars
Avril
Mai
Juin
Juillet


Octobre
Novembre
Décembre

Mais où sont donc passé Août et Septembre ??

Bref, en voulant contourner mon problème initial, j'en rencontre un deuxième. L'array fonctionne bien avec 1,2,3,...,12 (sans le zéro initial) mais comme je ne récupère pas ce format à cause de mon 1er problème, me voilà coincé.

Je me doute bien que j'ai du faire une erreur assez basique, mais à force de chercher, je vois de moins en moins.

Merci par avance pour votre aide.

A voir également:

1 réponse

Utilisateur anonyme
16 sept. 2013 à 18:07
Bonjour

Pour ton premier problème, je ne sais pas d'où tu sors ton format %n, dans ma doc il n'y a que %m.
Pour août et septembre qui disparaissent, c'est parce que 08 et 09 ne sont pas des nombres en PHP, aussi bizarre que ça puisse te paraître. Un nombre qui commence par 0 est supposé en octal, il ne doit donc pas contenir les chiffres 8 ni 9.
Pour y remédier, tu peux bricoler une fonction qui supprime le 0 inutile ou définir un tableau associatif :
$mois_fr = array('01'=>'Janvier','02'=>'Février'...
1
Un grand merci à toi.
Pour le %n, j'avoue, je l'ai piqué dans un bout de code chopé sur le net. J'ai vérifié avant et il me semblait qu'il ne s'utilisait qu'avec la fonction strftime. Mais bon, j'ai quand même voulu tester, ça m'apprendra :D

Du coup j'ai fait un tableau associatif comme tu l'indiques et ça marche nickel. (le coup du '09' c'est pas un nombre à du mal à passer pour un matheux de formation ;D )

Encore merci
0
Utilisateur anonyme
16 sept. 2013 à 23:29
De rien :)

J'espère que pour le matheux que tu es, il est naturel de ne pas admettre de 8 ni de 9 dans un nombre écrit en octal. D'ailleurs j'ai dit une bêtise comme tu as pu t'en rendre compte si tu as lu le lien : en fait, 08 et 09 sont bien des nombres, mais PHP arrête l'analyse dès qu'un caractère incorrect est rencontré. Du coup, ça fait 0 pour lui et non pas une erreur comme on pourrait s'y attendre.
0