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

时间:2013-08-27 14:04:08

标签: php date

我有这个PHP代码:

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

echo $monthName;

但它正在返回December而不是August

$result["month"]等于8,因此sprintf函数正在添加0以使其08

27 个答案:

答案 0 :(得分:308)

推荐的方法:

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

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

! formatting character用于将所有内容重置为Unix epochm格式字符是一个月的数字表示,带有前导零。

替代解决方案:

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

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

如果您想要Mar这样的3个字母的月份名称,请将F更改为M。可以在the PHP manual documentation

中找到所有可用格式选项的列表

答案 1 :(得分:40)

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

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

答案 2 :(得分:25)

使用mktime()

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

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

答案 3 :(得分:17)

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

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

您应该使用mktime,它将日期元素作为参数。

您的完整代码:

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

...

答案 4 :(得分:16)

要对当前区域设置进行转换,您可以使用strftime函数:

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

date不尊重语言环境strftime

答案 5 :(得分:5)

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

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

答案 6 :(得分:3)

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

我在https://css-tricks.com/snippets/php/change-month-number-to-month-name/找到了这个,但效果很好。

答案 7 :(得分:3)

如果你有月份号,你可以先用它创建一个日期,默认日期为当年的第一年和默认年份,然后从创建的日期中提取月份名称:

label

此代码假设您的月号存储在$ i

希望这有助于某人

答案 8 :(得分:2)

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

Ucfirst()

要了解有关设置区域设置的更多信息,请转到http://php.net/manual/en/function.setlocale.php

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

{{1}}用于大写字符串中的第一个字母。

答案 9 :(得分:2)

根据需要进行调整

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

答案 10 :(得分:1)

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

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

这是做到这一点的方法

答案 11 :(得分:1)

  

只需一行

DateTime::createFromFormat('!m', $salary->month)->format('F'); //April

答案 12 :(得分:1)

有几种方法可以从给定的数字打印月份。这是一些

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

答案 13 :(得分:1)

您需要使用strtotimemktime

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

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

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

答案 14 :(得分:1)

date("F", strtotime($result["month"]))

使用上面的代码

答案 15 :(得分:0)

我知道这个问题刚才被问过,但我认为每个寻找这个答案的人都可能只是试图避免写出整个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";
    }
}

答案 16 :(得分:0)

使用:

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

答案 17 :(得分:0)

您可以只在SQL中使用monthname()函数。

从表组中按月名(date_column)选择月名(date_column)

答案 18 :(得分: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"

请参阅docs for cal_info()

答案 19 :(得分:0)

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

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

答案 20 :(得分:0)

<?php
$month =1;
$convert =DateTime::createFromFormat('!m', $month);
echo $convert->format('F');
?>

答案 21 :(得分:0)

  

对于php 7.1

 $monthyear= date("M Y");

答案 22 :(得分:0)

通过提供月份号获取月份名称

  

$ month_number = 5;

     

$ monthName = date('F',mktime(0,0,0,$ month_number,10));

其中“ F”将返回您的月份名称,例如。 ‘五月’

答案 23 :(得分: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

答案 24 :(得分:0)

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

1。如果想要一月,二月和三月的结果,请尝试在日期以下的数字下方输入“ M”作为参数。

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

输出:5月

/ 2。您可以使用'F'而不是'M'来获取完整的月份名称,作为输出1月2月3月等。

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

输出:1月

答案 25 :(得分:0)

$days = ['', 'Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
$month = ( date('m') < 10 ) ? date('m')[1] : date('m');

提取月份。

答案 26 :(得分:-3)

使用jdmonthname()等原生函数:

echo jdmonthname($monthNum, CAL_MONTH_GREGORIAN_LONG);