将月份从名称转换为数字

Posted

技术标签:

【中文标题】将月份从名称转换为数字【英文标题】:convert month from name to number 【发布时间】:2011-03-18 01:08:33 【问题描述】:

有没有一种简单的方法可以将$month = "July"; 更改为$nmonth = 707 也可以)。 我可以做一个案例陈述,但肯定已经有一个函数可以转换吗? 编辑: 我希望我能接受多个答案,因为你们两个基本上给了我结合你们的力量所需要的东西。

$nmonth = date('m',strtotime($month));

这将给出$month 的数值。 谢谢!

【问题讨论】:

【参考方案1】:

试试这个:

<?php
  $date = date_parse('July');
  var_dump($date['month']);
?>

【讨论】:

【参考方案2】:

是的,

$date = 'July 25 2010';
echo date('d/m/Y', strtotime($date));

m 将月份格式化为那里的数字表示形式。

【讨论】:

【参考方案3】:

看这里很有意思,kelly给出的代码效果很好,

$nmonth = date("m", strtotime($month));

但是对于 2 月份,当当前日期是闰年的 30 或 31 以及非闰年的 29、30、31 时,它不会按预期工作。它将返回 3 作为月份编号。例如:

$nmonth = date("m", strtotime("february"));

解决方案是,像这样添加年份和月份:

$nmonth = date("m", strtotime("february-2012"));

我从 php 手册中的 comment 得到这个。

【讨论】:

【参考方案4】:
$string = "July";
echo $month_number = date("n",strtotime($string));

返回 '7' [月份数]

使用date("m",strtotime($string)); 输出“08”

更多格式请参考这里..http://php.net/manual/en/function.date.php

【讨论】:

【参考方案5】:

你也可以使用这个:

$month = $monthname = date("M", strtotime($month));

【讨论】:

【参考方案6】:
$nmonth = date("m", strtotime($month));

【讨论】:

我测试了这个解决方案,在某些情况下它返回错误的数字,例如'5' 代表'四月'。有人知道为什么吗?稍后我会仔细研究它。 @longeasy 你的月和年都过了吗,看看下面我的回答。【参考方案7】:
$monthname = date("F", strtotime($month));

F 表示月份全名

【讨论】:

【参考方案8】:
<?php
$monthNum = 5;
$monthName = date("F", mktime(0, 0, 0, $monthNum, 10));
echo $monthName; //output: May
?>

【讨论】:

【参考方案9】:

如果你想要字符串名称中的月份数,那么

$month = 'August';
$year = 2019;
echo date('m',strtotime($month.' '.$year));

给 08

或者如果你想要月份的全名,那么

echo date('F')

或者如果你想要月份的半个名字,那么

echo date('M')

【讨论】:

【参考方案10】:

创建一个假日期可能是最简单的方法,这样您就可以使用日期功能。

这里的优秀参考:http://php.net/manual/en/function.date.php

例子:

<?
$month = 7;

$tempDate = mktime(0, 0, 0, $month, 1, 1900); 

echo date("m",$tempDate);


?>

【讨论】:

【参考方案11】:

上面的答案很好。这是另一种方法:-

function getMonthNumber($monthStr) 
//e.g, $month='Jan' or 'January' or 'JAN' or 'JANUARY' or 'january' or 'jan'
$m = ucfirst(strtolower(trim($monthStr)));
switch ($m) 
    case "January":        
    case "Jan":
        $m = "01";
        break;
    case "February":
    case "Feb":
        $m = "02";
        break;
    case "March":
    case "Mar":
        $m = "03";
        break;
    case "April":
    case "Apr":
        $m = "04";
        break;
    case "May":
        $m = "05";
        break;
    case "June":
    case "Jun":
        $m = "06";
        break;
    case "July":        
    case "Jul":
        $m = "07";
        break;
    case "August":
    case "Aug":
        $m = "08";
        break;
    case "September":
    case "Sep":
        $m = "09";
        break;
    case "October":
    case "Oct":
        $m = "10";
        break;
    case "November":
    case "Nov":
        $m = "11";
        break;
    case "December":
    case "Dec":
        $m = "12";
        break;
    default:
        $m = false;
        break;

return $m;

【讨论】:

二月,而不是“二月”【参考方案12】:

也许可以与strtotime()date() 结合使用?

【讨论】:

【参考方案13】:

使用

date("F", mktime(0, 0, 0, ($month)));

where, $month value will be 1 -> 12

【讨论】:

【参考方案14】:
$date = 'Dec 25 2099';
echo date('d/m/Y', strtotime($date));

这返回01/01/1970,这意味着php不支持所有日期,它返回正确的格式化日期直到Jan 19 2038Jan 20 2038返回01/01/1970

【讨论】:

【参考方案15】:
$dt = '2017-Jan-10';
         OR
$dt = '2017-January-10';

回显日期('Y-m-d', strtotime($dt));

回显日期('Y/m/d', strtotime($dt));

【讨论】:

【参考方案16】:

使用 PHP 5.4,您可以将 Matthew 的答案变成一条线:

$date = sprintf('%d-%d-01', $year, date_parse('may')['month']);

【讨论】:

【参考方案17】:

我知道这似乎是一个简单的解决方案,但为什么不直接使用这样的方法

<select name="month">
  <option value="01">January</option>
  <option value="02">February</option>
  <option selected value="03">March</option>
</select>

用户看到了二月,但是02发布到了数据库中

【讨论】:

以上是关于将月份从名称转换为数字的主要内容,如果未能解决你的问题,请参考以下文章

将月份名称转换为数字

将 Pandas 系列日期时间“月份”数字转换为月份文本 [重复]

Pentaho 水壶将月份数值转换为月份名称

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

在不了解文化的情况下将月份名称从一种语言转换为另一种语言?

在python pandas df中将月份数转换为名称