将数字转换为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];
你需要设置字段strtotime
或mktime
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);