2012-09-02 80 views
0

我有一個令人討厭的日期和時間問題。日期和時間錯誤的日期格式?

echo date('Y-m-d H:i', strtotime('1970-01-01 00:00:00')); 

返回:

1970-01-01 01:00:00 

我在做什麼錯? 1970-01-01 02:00:00正確輸出1970-01-01 02:00,但我試圖將(外國)格式的日期轉換爲時間戳,然後輸出新的日期格式。

這樣做的正確方法是什麼,如果不是這樣?

已解決:這個例子的工作原理是我的問題是一個無效的日期字符串(boolean false),它返回1970-01-01 01:00(GMT + 1)。案例關閉

+2

什麼是您的服務器時區? 'var_dump(strtotime('1970-01-01 00:00:00'));' – zerkms

+0

它是GMT +1。這對於區別是有意義的。但不是爲什麼1970-01-01 02:00:00正確地返回1970-01-01 02:00。 – tim

+0

var_dump是什麼?你在什麼操作系統下?它是Windows嗎? – zerkms

回答

1

好像你在Windows下,不支持date的負時間戳。

所以strtotime('1970-01-01 00:00:00')返回負值並被格式化爲date() - 負值變爲0,因此您得到的偏移量等於您的TZ偏移量。

對於1970-01-01 02:00:00strtotime的結果是3600(與UTC相差1小時+ 1小時),並且此值爲正數,因此它可以工作。

PS:作爲@馬克·貝克指出 - 這是很久以前固定的,但它在Windows版本提出的,它是對案件的唯一解釋

PPS:根據問題的意見 - 似乎所有事情工作正常(不知道OP如何得到錯誤的值)

+0

我沒有Windows服務器演示,但[codepad](http://codepad.org/K777PHn8)服務器似乎同意OP的發佈代碼沒有給出OP的觀察結果。 –

+0

@Jared Farrish:鍵盤按預期工作,不是嗎? – zerkms

+0

呃...是嗎?我認爲?你讀過上面的評論嗎? –