strtotime('2010年1月3日')在GMT + 5:30返回1230993600。PHP strtotime返回錯誤結果
雖然根據this,unix時間戳1230993600是1月3日,。所以它關閉了一年。
它發生在PHP 5.2.6以及5.2.11上。
strtotime('2010年1月3日')在GMT + 5:30返回1230993600。PHP strtotime返回錯誤結果
雖然根據this,unix時間戳1230993600是1月3日,。所以它關閉了一年。
它發生在PHP 5.2.6以及5.2.11上。
問題是日期字符串中的,
。這似乎是分開在字符串中的時間元素日期,
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
W如果你在這個月之後有一個逗號,它假定2010年是軍事時間而不是年份。如果您希望它將2010年解釋爲年份,請省略逗號。
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>";
爲您的格式返回正確的時間戳。
非常好的答案。只是添加一些信息:當strtotime()未能解析年份時,它使用當前年份(即2009年),就像它沒有被指定一樣。 – Savageman 2009-12-10 22:35:29
但爲什麼它與2009年一起工作?此外,第一種格式是完全有效的格式。 – understack 2009-12-10 22:36:09
好的,Savageman回答。 – understack 2009-12-10 22:36:43
PHP 5.2.10-2ubuntu6.3上的WFM: 'echo strtotime('3rd 3rd,2010');'returns'1231009800' – 2009-12-10 22:29:41
其實,根據那個網站,unix時間戳1230993600是01/03/09 @上午8點40分。 – 2009-12-10 22:30:44