190 votes

Convertir un nombre en nom de mois en PHP

J'ai ce code PHP :

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", strtotime($monthNum));

echo $monthName;

Mais c'est le retour December plutôt que August .

$result["month"] est égal à 8, donc le sprintf consiste à ajouter un 0 pour le faire 08 .

424voto

Amal Murali Points 37729

La méthode recommandée pour ce faire :

De nos jours, vous devriez vraiment utiliser les objets DateTime pour tous les calculs de date et d'heure. Pour cela, vous devez avoir une version de PHP >= 5.2. Comme indiqué dans La réponse de Glavić vous pouvez utiliser ce qui suit :

$monthNum  = 3;
$dateObj   = DateTime::createFromFormat('!m', $monthNum);
$monthName = $dateObj->format('F'); // March

El ! caractère de formatage est utilisé pour tout remettre à l'état initial Époque Unix . Le site m Le caractère de format est la représentation numérique d'un mois, avec des zéros en tête.

Solution alternative :

Si vous utilisez une ancienne version de PHP et que vous ne pouvez pas la mettre à jour pour le moment, vous pouvez utiliser cette solution. Le deuxième paramètre de date() accepte un horodatage, et vous pourriez utiliser la fonction mktime() pour en créer un, comme ça :

$monthNum  = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March

Si vous voulez le nom du mois en 3 lettres comme Mar le changement F à M . La liste de toutes les options de formatage disponibles se trouve à l'adresse suivante la documentation du manuel PHP .

44voto

Glavić Points 13021

Juste parce que tout le monde utilise les fonctions strtotime() et date(), je vais montrer DateTime exemple :

$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');

36voto

mintedsky Points 23

Utilice mktime() :

<?php
 $monthNum = 5;
 $monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
 echo $monthName; // Output: May
?>

Voir le manuel PHP : http://php.net/mktime

27voto

Dereckson Points 454

Pour effectuer la conversion dans le respect de la locale actuelle, vous pouvez utiliser la fonction strftime fonction :

setlocale(LC_TIME, 'fr_FR.UTF-8');                                              
$monthName = strftime('%B', mktime(0, 0, 0, $monthNumber));

date ne respecte pas la locale, strftime fait.

21voto

Greg Points 8483

strtotime s'attend à un format de date standard, et renvoie un timestamp.

Vous semblez passer strtotime un chiffre unique pour sortir un format de date.

Vous devriez utiliser mktime qui prend les éléments de date comme paramètres.

Votre code complet :

$monthNum = sprintf("%02s", $result["month"]);
$monthName = date("F", mktime(null, null, null, $monthNum));

echo $monthName;

Cependant, la fonction mktime ne requiert pas de zéro en tête du numéro du mois, donc la première ligne est complètement inutile, et $result["month"] peuvent être passés directement dans la fonction.

Tout cela peut ensuite être combiné en une seule ligne, en faisant écho de la date en ligne.

Votre code remanié :

echo date("F", mktime(null, null, null, $result["month"], 1));

...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X