2009-12-10 84 views
0

strtotime('2010年1月3日')在GMT + 5:30返回1230993600。PHP strtotime返回錯誤結果

雖然根據this,unix時間戳1230993600是1月3日,。所以它關閉了一年。

它發生在PHP 5.2.6以及5.2.11上。

+0

PHP 5.2.10-2ubuntu6.3上的WFM: 'echo strtotime('3rd 3rd,2010');'returns'1231009800' – 2009-12-10 22:29:41

+0

其實,根據那個網站,unix時間戳1230993600是01/03/09 @上午8點40分。 – 2009-12-10 22:30:44

回答

2

問題是日期字符串中的,。這似乎是分開在字符串中的時間元素日期,

echo date('Y-m-d H:i:s', strtotime('3rd January, 2010')); 

回報

2009-01-03 20:10:00 

echo date('Y-m-d H:i:s', strtotime('3rd January 2010')); 

,刪除)返回正確日期:

2010-01-03 00:00:00 
3

W如果你在這個月之後有一個逗號,它假定2010年是軍事時間而不是年份。如果您希望它將2010年解釋爲年份,請省略逗號。

1

strtotime()是不可靠的。它是一種上下文解析器,它試圖將日期的英文描述轉換爲時間戳。您使用的格式似乎不適合正確解析。

你可以看到差異將在下面的例子:

echo strtotime('3rd January,2010')."<BR>"; 
echo strtotime('3 January, 2010')."<BR>"; 
echo strtotime('January 3rd, 2010')."<BR>"; 
echo strtotime('January 3, 2010')."<BR>"; 

結果:

1231042200 
1231042200 
1262505600 
1262505600 

前兩回不同的時間戳比最後兩位。在這兩種格式中,後兩種語義(英語方面)更正確,我會嘗試使用它們。

編輯

正如其他海報指出,逗號混淆了日期部分解析器因您的日期標記的順序。

echo strtotime('3rd January 2010')."<BR>"; 

爲您的格式返回正確的時間戳。

+0

非常好的答案。只是添加一些信息:當strtotime()未能解析年份時,它使用當前年份(即2009年),就像它沒有被指定一樣。 – Savageman 2009-12-10 22:35:29

+0

但爲什麼它與2009年一起工作?此外,第一種格式是完全有效的格式。 – understack 2009-12-10 22:36:09

+0

好的,Savageman回答。 – understack 2009-12-10 22:36:43