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

use*_*234 140 php date

我有这个PHP代码:

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

echo $monthName;
Run Code Online (Sandbox Code Playgroud)

但它正在回归December而不是August.

$result["month"]等于8,所以sprintf函数是添加一个0来制作它08.

Ama*_*ali 333

建议的方法是:

如今,您应该将DateTime对象用于任何日期/时间数学.这要求您拥有> = 5.2的PHP版本.如Glavić的回答所示,您可以使用以下内容:

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

!格式化字符用于重置一切的Unix纪元.该m格式字符是一月份的数字表示,用前导零.

替代方案:

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

$monthNum  = 3;
$monthName = date('F', mktime(0, 0, 0, $monthNum, 10)); // March
Run Code Online (Sandbox Code Playgroud)

如果您想要3个字母的月份名称Mar,请更改FM.可以在PHP手册文档中找到所有可用格式选项的列表.

  • 这不符合LC_TIME语言环境,并始终以英语输出月份名称. (34认同)
  • @orrd:如果date()和DateTime之间的速度差异成为你正在构建的应用程序的瓶颈,我会说你有更大的问题需要担心.对于实际的应用程序,你不可避免地需要对日期做其他事情,然后让它在一个对象中是一个优越的,因为它有一个更容易阅读的API. (3认同)
  • 我从来没有在SO上看过这个 - 致命的错误:在48个加号的Noone中调用非对象的成员函数格式()没有这个吗? (2认同)
  • 为什么你说我们“真的应该”为此使用 DateTime 对象?DateTime 对象很有用,但如果您想做的只是像这样简单的事情,则 date() 函数要简单得多,因为开销要低得多(在速度和内存方面)。 (2认同)

Gla*_*vić 41

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

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


min*_*sky 28

用途mktime():

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

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


Gre*_*reg 18

strtotime 期望标准日期格式,并传回时间戳.

您似乎传递strtotime一个数字来输出日期格式.

您应该使用mktime将日期元素作为参数.

您的完整代码:

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

echo $monthName;
Run Code Online (Sandbox Code Playgroud)

但是,mktime函数不需要前导零到月份数,因此第一行完全没必要,并且$result["month"]可以直接传递给函数.

然后可以将它们组合成一行,以内联方式回显日期.

您重构的代码:

echo date("F", mktime(null, null, null, $result["month"], 1));
Run Code Online (Sandbox Code Playgroud)

...

  • 很好,@Mischa.如果你没有设置一天(第5个参数),`mktime`将使用当天.今天是31日.2月31日是什么时候?:) (3认同)

Der*_*son 17

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

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

date不尊重语言环境strftime.

  • @Roubi由于utf8_encode被记录为“将ISO-8859-1字符串编码为UTF-8”,这意味着您的û是ISO-8859-1。如果您到处都需要UTF-8(并且您的PHP代码默认不在UTF-8中运行),则可以在setlocale中使用LC_ALL而不是LC_TIME。 (2认同)

Nis*_* Up 8

有很多方法可以从给定的数字中打印一个月。为您挑选一间套房。

1. date() 函数以及参数 'F'

代码示例:

$month_num = 10;
echo date("F", mktime(0, 0, 0, $month_num, 10)); //output: October
Run Code Online (Sandbox Code Playgroud)

2. 通过使用 createFromFormat() 创建 php 日期对象

代码示例

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

3. strtotime() 函数

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

4. mktime() 函数

echo date("F", mktime(null, null, null, $monthNum)); // Output: October
Run Code Online (Sandbox Code Playgroud)

5. 通过使用 jdmonthname()

$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct
Run Code Online (Sandbox Code Playgroud)


Tre*_*haw 6

如果您只想从年初到年底使用一个月名称数组,例如填充一个下拉选择,我将使用以下内容;

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


小智 6

如果您有月份编号,则可以首先从中创建一个默认日期为 1st 和当前年份的默认年份的日期,然后从创建的日期中提取月份名称:

echo date("F", strtotime(date("Y") ."-". $i ."-01"))
Run Code Online (Sandbox Code Playgroud)

此代码假设您将月份编号存储在 $i 中


zza*_*per 5

根据需要适应

$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];
Run Code Online (Sandbox Code Playgroud)


Mat*_*ark 5

$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
Run Code Online (Sandbox Code Playgroud)

我在https://css-tricks.com/snippets/php/change-month-number-to-month-name/上找到了这个,它运行良好。