2013-05-20 104 views
1

我正在阅读最后修改的标题,字符串是“Mon,2013年5月21日09:10 GMT”,并试图将其与我当地的时间()(新西兰)进行比较。但我刚刚注意到,当字符串中包含“Mon”时,strtotime将日期设置为“27”而不是“21”。这是正常的吗?难道我做错了什么?认为我错过了一些东西...PHP strtotime格林威治标准时间转换错误日期?

$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 

回答

3
  1. 的原因错误是,有没有像Mon, 21 May 2013从我的日历21stMayTuesday

  2. From PHP DOC

在M/d日期/ y或dmy格式通过查看th之间的分隔符来消除歧义e各种组成部分:如果分隔符是斜线(/),则假定美国m/d/y;而如果分隔符是破折号( - )或点(。),则假定欧洲的d-m-y格式。

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

实例

$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"); 

输出

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

啊。想你解决了那一个。我手动复制并更改了日期以测试它,并错过了将“Mon”更改为“Tue”。 :| – regan

1

根据php.net,这种格式可能实际上是无效的;有一个可接受的格式列表在这里:http://www.php.net/manual/en/datetime.formats.php - 星期几没有提及。

+0

确认修剪掉星期一,一开始yeilds正确的结果。 – Orangepill

+0

我看过的所有地方“Mon,...”是用于Last-Modified标题的格式,所以我猜别人遇到同样的问题。您是否知道在发送Last-Modified标头时是否可以放心地排除“Mon”,而不会将事情搞砸? – regan

相关问题