PHP strtotime给GMT转换错误的日期?

时间:2013-05-20 21:23:46

标签: php date strtotime gmt

我正在阅读一个Last-Modified标题,其字符串为“Mon,21 May 2013 09:10:30 GMT”并尝试将其与我当地时间()(新西兰)进行比较。但我刚刚注意到,当字符串中包含“Mon”时,strtotime使日期为“27”而不是“21”。这是正常的吗?难道我做错了什么?想想我错过了什么......

$strtotime = strtotime("Mon, 21 May 2013 09:10:30 GMT");
$strtotime_date = date("Y-m-d H:i:s",$strtotime);

//[strtotime] => 1369645830
//[strtotime_date] => 2013-05-27 21:10:30

2 个答案:

答案 0 :(得分:3)

  1. 出错的原因是我的日历Mon, 21 May 2013 21 st中没有May之类的内容Tuesday $strtotime = strtotime("Tue, 21 May 2013 09:10:30 GMT"); echo date("Y-m-d H:i:s", $strtotime),PHP_EOL; $strtotime = DateTime::createFromFormat("D, d M Y g:i:s O", "Tue, 21 May 2013 09:10:30 GMT"); echo $strtotime->format("Y-m-d H:i:s"); 1}}

  2. From PHP DOC

  3.   

    通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。

         

    为避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()。

    示例

    2013-05-21 11:10:30  <- strtotime
    2013-05-21 09:10:30  <- datetime 
    

    输出

    {{1}}

答案 1 :(得分:1)

根据php.net,这种格式实际上可能无效;这里列出了可接受的格式:http://www.php.net/manual/en/datetime.formats.php - 未提及星期几。