8

我很困惑为什么以下 PHP strtotime 函数在 $monthToGet = 'June' 时返回“07”作为月份编号,而不是“06”:

$monthToGet = $_GET['mon'];
$monthAsNumber = date('m', strtotime($monthToGet));

从搜索来看,这可能是由于我没有指定默认日期参数(在本例中为日期和年份)。会是这个原因吗?

任何建议表示赞赏!

4

3 回答 3

5

TL;博士

你说的对

echo date("m", strtotime("June"));
-> 07

但是,确实有效:

echo date("m", strtotime("1. June 2012"));
-> 06

问题解释

今天是31. July 2012并且由于您只提供一个月,因此使用当前日期和当前年份来创建有效日期。

请参阅文档

笔记

该函数期望得到一个包含英文日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳(自 1970 年 1 月 1 日 00:00:00 UTC 以来的秒数),相对于现在给出的时间戳,或如果没有提供现在的当前时间。

备择方案

您可以使用date_parse_from_format()strptime()通过稍微不同的方法来实现您想要的。

(感谢 johannes_ 和 johann__ 的意见)

于 2012-07-31T13:18:40.657 回答
1

固定:

$monthToGet = '1 '. $_GET['mon'];

但我仍然不明白为什么,因为“m”是有效的日期格式

于 2012-07-31T13:22:10.873 回答
1

今天是 7 月 31 日。所以strtotimewith only"June"被解释为31 June=> 1 July

实际上:

echo date("Y-m-d",strtotime("January"));  // 2012-01-31
echo date("Y-m-d",strtotime("February")); // 2012-03-02

当然......只有today 31 Jul 2012:) 明天一切都会奏效。

你很幸运,因为你今天才发现这个错误 ;)

于 2012-07-31T13:37:06.140 回答