2013-05-20 151 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

相關問題