将数字转换为PHP中的月份名称

我有这个PHP代码:

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

但它将在December而不是August

$result["month"]等于8,所以sprintf函数添加一个0使其为08

推荐的方法是:

如今,你应该真的在使用DateTime对象进行任何date/时间的math运算。 这要求你有一个PHP版本> = 5.2。 如Glavić的回答所示,您可以使用以下内容:

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

! 格式化字符用于将所有事件重置到Unix纪元 。 m格式字符是一个月的数字表示,前面的零。

替代scheme:

如果您使用的是较旧的PHP版本,并且目前无法升级,则可以使用此解决scheme。 date()函数的第二个参数接受一个时间戳,你可以使用mktime()来创build一个,如下所示:

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

如果你想要像Mar一样的3个字母的月份名称,请将F更改为M 所有可用的格式选项列表可以在PHP手册文档中find 。

只是因为每个人都使用strtotime()和date()函数,我会显示DateTime示例:

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

使用mktime()

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

请参阅PHP手册: http : //php.net/mktime

strtotime期望一个标准的date格式,并传回时间戳。

你似乎正在传递一个数字来输出date格式。

您应该使用以date元素作为参数的mktime

您的完整代码:

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

但是,mktime函数不需要前几个月的数字,所以第一行是完全不必要的, $result["month"]可以直接传递给函数。

然后可以将它们合并为一行,并在内联中回显date。

您重构的代码:

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

要对当前语言环境进行转换,可以使用strtotime函数:

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

date不尊重地区, strtotime

根据需要调整

 $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]; 

你需要设置字段strtotimemktime

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

mktime只设置一个月。 试试这个:

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

如果你只是想要从一年的开始到最后一个月份的名字,比如填充一个下拉select,我只需要使用下面的内容;

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

这很简单,为什么这么多人提出这样糟糕的build议呢? @宝来是最接近的,但这是最强劲的

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

这是做到这一点的方法

如果您有月份编号,则可以先使用默认date1和默认年份来创builddate,然后从创build的date中提取月份名称:

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

这段代码假设你有你的月份号存储在$我

希望这有助于某人

我认为使用cal_info()是从数字转换为string最简单的方法。

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

查看cal_info()的文档

使用:

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

我知道这个问题是前一阵子被问到的,但是我想每个人都在寻找这个答案,可能只是为了避免写出整个if / else语句,所以我把它写出来,以便复制/粘贴。 这个函数的唯一的注意事项是,它是在一个月的实际数量,而不是一个0索引的数字,所以1月= 1,而不是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"; } } 
 date("F", strtotime($result["month"])) 

使用上面的代码

目前我正在使用下面的解决scheme来解决同样的问题:

 //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; 

要阅读更多关于设置语言环境,请访问http://php.net/manual/en/function.setlocale.php

要了解有关strftime的更多信息,请访问http://php.net/manual/en/function.strftime.php

Ucfirst()用于大写string中的第一个字母。

 $monthNum = 5; $monthName = date("F", mktime(0, 0, 0, $monthNum, 10)); 

我发现这在https://css-tricks.com/snippets/php/change-month-number-to-month-name/ ,它的工作完美。

TürkçeAy ismiyazdırma:

 setlocale(LC_TIME,"turkish"); $month=iconv("ISO-8859-9","UTF-8",strftime('%B')); echo $month;// Mart echo date('F');// March 

使用本地函数,如jdmonthname()

 echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);