web-dev-qa-db-fra.com

Convertir le numéro en nom de mois dans PHP

J'ai ce code PHP:

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

echo $monthName;

Mais il retourne December plutôt que August.

$result["month"] est égal à 8, la fonction sprintf ajoute donc un 0 pour le rendre 08.

133
user2710234

La manière recommandée de procéder:

De nos jours, vous devriez vraiment utiliser des objets DateTime pour tout calcul de date/heure. Cela nécessite que vous ayez une PHP version> = 5.2. Comme indiqué dans réponse de Glavić , vous pouvez utiliser les éléments suivants:

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

Le ! caractère de formatage est utilisé pour tout réinitialiser sur le Epoque Unix . Le caractère de format m est la représentation numérique d'un mois, avec les zéros en tête.

Solution alternative:

Si vous utilisez une ancienne version de PHP et que vous ne pouvez pas effectuer de mise à niveau pour le moment, vous pouvez utiliser cette solution. Le second paramètre de la fonction date() accepte un horodatage. Vous pouvez utiliser mktime() pour en créer un, comme suit:

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

Si vous souhaitez que le nom du mois à 3 lettres ressemble à Mar, remplacez F par M. La liste de toutes les options de formatage disponibles se trouve dans la documentation manuelle PHP .

319
Amal Murali

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

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

Utilisez 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

26
mintedsky

strtotime attend un format de date standard et renvoie un horodatage.

Vous semblez passer strtotime un seul chiffre pour afficher 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 nécessite pas de zéro au début du mois. La première ligne est donc totalement inutile et $result["month"] peut être passé directement à la fonction.

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

Votre code refactored:

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

...

18
Greg

Pour convertir les paramètres régionaux en vigueur, vous pouvez utiliser la fonction strftime:

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

date ne respecte pas les paramètres régionaux, strftime.

17
Dereckson

Si vous voulez juste un tableau de noms de mois du début à la fin de l’année, par exemple. pour remplir une liste déroulante, je voudrais simplement utiliser ce qui suit;

for ($i = 0; $i < 12; ++$i) {
  $months[$m] = $m = date("F", strtotime("January +$i months"));
}
6
Trent Renshaw

Si vous avez le numéro du mois, vous pouvez d'abord créer une date avec une date par défaut de la 1ère année et l'année par défaut de l'année en cours, puis extraire le nom du mois à partir de la date créée:

echo date("F", strtotime(date("Y") ."-". $i ."-01"))

Ce code suppose que votre numéro de mois est stocké dans $ i

J'espère que cela aide quelqu'un

4
Bryan Itur

Il existe de nombreuses façons d’imprimer un mois à partir du nombre donné. Choisissez une suite pour vous.

1. Fonction date () avec le paramètre 'F'

Exemple de code:

$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October

2. En créant un objet date php en utilisant createFromFormat ()

Exemple de code

$dateObj   = DateTime::createFromFormat('!m', $monthNum);
echo "month name: ".$dateObj->format('F'); // Output: October

. Fonction strtotime ()

echo date("F", strtotime('00-'.$monthNum.'-01')); // Output: October

4. Fonction mktime ()

echo date("F", mktime(null, null, null, $monthNum)); // Output: October

5. En utilisant jdmonthname ()

$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct
3
Nishad Up
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));

J'ai trouvé ceci sur https://css-tricks.com/snippets/php/change-month-number-to-month-name/ et cela fonctionnait parfaitement.

3
Matthew Park

s'adapter au besoin

$m='08';
$months = array (1=>'Jan',2=>'Feb',3=>'Mar',4=>'Apr',5=>'May',6=>'Jun',7=>'Jul',8=>'Aug',9=>'Sep',10=>'Oct',11=>'Nov',12=>'Dec');
echo $months[(int)$m];
2
zzapper

c'est trivialement facile, pourquoi tant de gens font-ils de si mauvaises suggestions? @ Bora était le plus proche, mais c'est le plus robuste

/***
 * returns the month in words for a given month number
 */
date("F", strtotime(date("Y")."-".$month."-01"));

c'est la façon de le faire

2
Mr Heelis

J'utilise actuellement la solution ci-dessous pour résoudre le même problème:

//set locale, 
setlocale(LC_ALL,"US");

//set the date to be converted
$date = '2016-08-07';

//convert date to month name
$month_name =  ucfirst(strftime("%B", strtotime($date)));

echo $month_name;

Pour en savoir plus sur les paramètres régionaux, allez à http://php.net/manual/en/function.setlocale.php

Pour en savoir plus sur strftime, allez à http://php.net/manual/en/function.strftime.php

Ucfirst() est utilisé pour mettre en majuscule la première lettre d'une chaîne.

2
Cristo Rutazihana

Juste une ligne

DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
2
Kaushik shrimali
date("F", strtotime($result["month"]))

utiliser le code ci-dessus

1
Visakh B Sujathan

Vous devez définir des champs avec strtotime ou mktime

echo date("F", strtotime('00-'.$result["month"].'-01'));

Avec mktime définissez uniquement le mois. Essaye celui-là:

echo date("F", mktime(0, 0, 0, $result["month"], 1));
1
Bora
<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>
1
Manjeet Kumar Nai

Je pense que cal_info () est le moyen le plus simple de convertir un nombre en chaîne.

$monthNum = sprintf("%02s", $result["month"]); //Returns `08`
$monthName = cal_info(0); //Returns Gregorian (Western) calendar array
$monthName = $monthName[months][$monthNum];

echo $monthName; //Returns "August"

Voir le docs pour cal_info ()

0
boomx09

Utilisation:

$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
0
temuri

Ceci pour tous les besoins de conversion date-heure

 <?php
 $newDate = new DateTime('2019-03-27 03:41:41');
 echo $newDate->format('M d, Y, h:i:s a');
 ?>
0
imtaher

pour php 7.1

 $monthyear= date("M Y");
0
shivakumar hk

Pour obtenir le nom du mois en fournissant le numéro du mois

$ mois_numéro = 5;

$ monthName = date ('F', mktime (0, 0, 0, $ mois_numéro, 10));

Où 'F' vous renverra le nom du mois, par exemple. 'Mai'

0
Bijendra Sahu

Je sais que cette question a été posée il y a quelque temps déjà, mais je pensais que tous ceux qui cherchaient cette réponse essayaient probablement d'éviter d'écrire toutes les déclarations if/else, je les ai donc rédigées pour vous afin que vous puissiez les copier/coller. Le seul inconvénient de cette fonction est qu'elle indique le nombre réel du mois, et non pas un nombre indexé par 0, donc janvier = 1 et non 0.

function getMonthString($m){
    if($m==1){
        return "January";
    }else if($m==2){
        return "February";
    }else if($m==3){
        return "March";
    }else if($m==4){
        return "April";
    }else if($m==5){
        return "May";
    }else if($m==6){
        return "June";
    }else if($m==7){
        return "July";
    }else if($m==8){
        return "August";
    }else if($m==9){
        return "September";
    }else if($m==10){
        return "October";
    }else if($m==11){
        return "November";
    }else if($m==12){
        return "December";
    }
}
0
Freaky Turtle

Vous pouvez simplement utiliser la fonction monthname () en SQL.

SELECT monthname (date_column) du groupe de tables par monthname (date_column)

0

C'est comme ça que je l'ai fait

// sets Asia/Calcutta time zone
date_default_timezone_set("Asia/Calcutta");

//fetches current date and time
$date = date("Y-m-d H:i:s");

$dateArray = date_parse_from_format('Y/m/d', $date);
$month = DateTime::createFromFormat('!m', $dateArray['month'])->format('F');
$dateString = $dateArray['day'] . " " . $month  . " " . $dateArray['year'];

echo $dateString;

retourne 30 June 2019

0
Vicky Salunkhe