我很困惑为什么以下 PHP strtotime 函数在 $monthToGet = 'June' 时返回“07”作为月份编号,而不是“06”:
$monthToGet = $_GET['mon'];
$monthAsNumber = date('m', strtotime($monthToGet));
从搜索来看,这可能是由于我没有指定默认日期参数(在本例中为日期和年份)。会是这个原因吗?
任何建议表示赞赏!
我很困惑为什么以下 PHP strtotime 函数在 $monthToGet = 'June' 时返回“07”作为月份编号,而不是“06”:
$monthToGet = $_GET['mon'];
$monthAsNumber = date('m', strtotime($monthToGet));
从搜索来看,这可能是由于我没有指定默认日期参数(在本例中为日期和年份)。会是这个原因吗?
任何建议表示赞赏!
你说的对
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__ 的意见)
今天是 7 月 31 日。所以strtotime
with 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
:) 明天一切都会奏效。
你很幸运,因为你今天才发现这个错误 ;)