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
.
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 .
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');
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
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.
$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.
echo date("F", mktime(null, null, null, $result["month"], 1));
...
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
.
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"));
}
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
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
$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.
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];
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
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.
Juste une ligne
DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
date("F", strtotime($result["month"]))
utiliser le code ci-dessus
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));
<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>
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 ()
Utilisation:
$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
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');
?>
pour php 7.1
$monthyear= date("M Y");
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'
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";
}
}
Vous pouvez simplement utiliser la fonction monthname () en SQL.
SELECT monthname (date_column) du groupe de tables par monthname (date_column)
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