2011-09-02 42 views
5

考慮以下字符串日期:Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)的strtotime日期怪異的結果

在PHP,如果我做以上一個的strtotime,然後將其轉換回字符串日期,它似乎獲得一個小時。

echo $str_date," Vs ",date("c",strtotime($str_date)); 

產地:

Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs的2011-09-02T22:00:00+01:00

我意識到這是日光節約做,但如何彌補這一?

回答

1

我意識到這是與夏令時,但如何補償呢?

通過不使用date()strtotime();所述DateTime類是優選的。

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
$datetime = new DateTime($str_date); 
echo $datetime->format('c'); // 2011-09-02T21:00:00+01:00 

或程序風格

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo date_format(date_create($str_date), 'c'); // 2011-09-02T21:00:00+01:00 

旁白:如果你希望仍然使用date()/strtotime()那麼,作爲其他的答案和你自己的觀測表明,你需要小心在日期字符串,是你的腳本中使用的時區。

+0

這將產生預期的結果,謝謝。 –

3

我想你誤會,
沒有日光節約在這種情況下,
GMT,你獲得,因爲在我的時區是

一個小時(GMT + 8)

php -r "echo date('r', strtotime('Fri Sep 02 2011 21:00:00 GMT+0100'));" 
Sat, 03 Sep 2011 04:00:00 +0800 

我得到7小時,因爲GMT+8 - GMT+1 = 7

1

你使用哪個PHP版本?什麼是你的date.timezone設置?我問,因爲我不能重現你的輸出在Mac OS X上運行PHP 5.3.6:

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time) Vs 1970-01-01T01:00:00+01:00 

這是正確的,因爲Fri Sep 02 2011 21:00:00 GMT+0100 (GMT Daylight Time)是不是有效的日期/時間字符串。

$str_date = 'Fri Sep 02 2011 21:00:00 GMT+0100'; 
echo $str_date," Vs ",date("c",strtotime($str_date)); 
// Fri Sep 02 2011 21:00:00 GMT+0100 Vs 2011-09-02T22:00:00+02:00 

這是正確的,因爲我在GMT + 2。

+0

燁,'(GMT夏令時)'是多餘的 – ajreal

0

好像strtotime()呈現你的時間爲SOAP格式:YY "-" MM "-" DD "T" HH ":" II ":" SS frac tzcorrection?

結果是:

"2008-07-01T22:35:17.02", "2008-07-01T22:35:17.03+08:00" 

你可以試試你的時間字符串格式一些其他時間格式。看在http://www.php.net/manual/en/datetime.formats.compound.php