6月的PHP strtotime将于7月返回

时间:2012-07-31 13:14:13

标签: php

我很难过为什么下面的PHP strtotime函数返回'07'作为月号,而不是'06'当$ monthToGet ='June'时:

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

从搜索开始,它似乎可能是由于我没有指定默认日期参数(在这种情况下是日期和年份)。那会是原因吗?

任何建议都赞赏!

3 个答案:

答案 0 :(得分:5)

TL; DR

你是对的

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

但是,确实有效:

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

问题解释

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

请参阅documentation

  

注意

     

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

替代

您可以使用date_parse_from_format()strptime()以稍微不同的方法实现您的目标。

(感谢johannes_和johann__的输入)

答案 1 :(得分:1)

修正:

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

但我仍然不明白为什么,因为“m”是a valid date format

答案 2 :(得分:1)

今天是7月31日。因此只有strtotime的{​​{1}}被解释为"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 :)明天一切都会有用。

你很幸运,因为你今天发现了这个bug;)