169

我有这个 PHP 代码:

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

echo $monthName;

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

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

4

21 回答 21

397

推荐的方法:

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

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

!格式化字符用于将所有内容重置为Unix epoch。格式字符是月份的m数字表示,带有前导零。

替代解决方案:

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

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

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

于 2013-08-27T14:13:06.813 回答
43

正因为每个人都在使用 strtotime() 和 date() 函数,所以我将展示DateTime示例:

$dt = DateTime::createFromFormat('!m', $result['month']);
echo $dt->format('F');
于 2013-08-27T14:12:37.150 回答
31

使用mktime()

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

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

于 2014-01-13T08:24:20.060 回答
26

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

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

date不尊重语言环境,strftime确实如此。

于 2014-08-28T01:24:16.110 回答
21

strtotime需要标准日期格式,并传回时间戳。

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

您应该使用mktimewhich 将日期元素作为参数。

您的完整代码:

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

echo $monthName;

但是,mktime 函数不需要在月份数字前加上前导零,因此第一行完全没有必要,$result["month"]可以直接传递给函数。

然后可以将它们全部组合成一行,与内联日期相呼应。

您重构的代码:

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

...

于 2013-08-27T14:11:00.230 回答
9

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

for ($i = 0; $i < 12; ++$i) {
  $months[$m] = $m = date("F", strtotime("January +$i months"));
}
于 2015-01-19T01:41:55.943 回答
9

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

1. date() 函数和参数 'F'

代码示例:

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

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

代码示例

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

3. strtotime() 函数

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

4. mktime() 函数

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

5. 通过使用 jdmonthname()

$jd=gregoriantojd($monthNum,10,2019);
echo jdmonthname($jd,0); // Output: Oct
于 2019-02-21T06:33:28.203 回答
6

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

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

此代码假定您将月份数存储在 $i

于 2016-07-16T16:32:46.210 回答
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];
于 2015-11-10T17:10:17.027 回答
5
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));

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

于 2017-02-22T14:20:02.667 回答
2

strtotime您需要使用或设置字段mktime

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

mktime仅设置月份。试试这个:

echo date("F", mktime(0, 0, 0, $result["month"], 1));
于 2013-08-27T14:09:22.167 回答
2

这很简单,为什么这么多人提出如此糟糕的建议?@Bora 是最接近的,但这是最强大的

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

这是这样做的方法

于 2016-05-11T15:59:34.550 回答
2

我目前正在使用以下解决方案来解决相同的问题:

//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()用于将字符串中的第一个字母大写。

于 2016-08-07T05:55:26.763 回答
2

这可以满足日期时间转换的所有需求

 <?php
 $newDate = new DateTime('2019-03-27 03:41:41');
 echo $newDate->format('M d, Y, h:i:s a');
 ?>
于 2019-03-27T11:03:29.580 回答
2

您只需一行即可完成:

DateTime::createFromFormat('!m', $salary->month)->format('F'); //April
于 2019-04-25T12:21:22.550 回答
1
$days = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
$month = ( date('m') < 10 ) ? date('m')[1] : date('m');

这提取了几个月。

于 2020-05-28T22:36:00.377 回答
0

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

$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()的文档

于 2015-04-30T20:37:31.033 回答
0

我就是这样做的

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

返回30 June 2019

于 2019-06-30T11:40:07.417 回答
0

这里有一个简单的技巧,您可以根据需要使用 strtotime() 函数,将数字转换为月份名称。

1.如果您想要一月、二月和三月的结果然后尝试下面的一个,在日期内使用“M”作为参数。

$month=5;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

输出:五月

/2。您可以尝试使用“F”而不是“M”来获取完整的月份名称作为输出 January February March 等。

$month=1;
$nmonth = date('M',strtotime("01-".$month."-".date("Y")));
echo $nmonth;

输出:一月

于 2020-05-15T07:00:15.127 回答
-1

利用:

$name = jdmonthname(gregoriantojd($monthNumber, 1, 1), CAL_MONTH_GREGORIAN_LONG);
于 2015-05-18T16:54:57.100 回答
-4

我想每个寻找这个答案的人可能只是想避免写出整个 if/else 语句,所以我为你写了出来,这样你就可以复制/粘贴了。这个函数唯一需要注意的是,它是月份的实际数字,而不是 0 索引数字,所以一月 = 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";
    }
}
于 2015-09-11T16:40:30.763 回答