2012-09-13 34 views
0

我有以下代碼:日期時區問題與夏令

var_dump(new \DateTime('now', new DateTimeZone('GMT'))); 

,我得到下面的輸出,這是一個小時的背後:

object(DateTime)#894 (3) { ["date"]=> string(19) "2012-09-13 13:54:26" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "UTC" } 

但是如果我的代碼更改以下:

var_dump(new \DateTime('now', new DateTimeZone(date_default_timezone_get()))); 

我再拿到folling輸出這是正確的:

object(DateTime)#894 (3) { ["date"]=> string(19) "2012-09-13 14:54:26" ["timezone_type"]=> int(3) ["timezone"]=> string(13) "Europe/London" } 

我正在讀的德里克Rethans的blog與時區3應該考慮到,任何日光節約時間,任何人都可以解釋爲什麼在第一個代碼段我什麼它實際上是前得到1小時?

回答

2

那麼,在第一個片段你問「GMT」的時區。這是一個含糊不清的術語,但我通常希望這意味着GMT本身 - 大致相當於UTC,並且沒有夏令時。這就是爲什麼不是應用夏令時,而是將時區報告爲UTC。

歐洲/倫敦時區在格林尼治標準時間花費了半年,而在BST花費了半年時間。

我建議你避開可能的3個字母的時區縮寫的地方。他們充滿了各種失敗的可能性。 (現在閱讀博客文章,這基本上是建議的內容。)

+0

關於第一個是「歐洲/倫敦」的時區,這是一個複製和粘貼問題:-S我的壞,現在改變了它到它實際顯示的內容 – Matt

+0

@Matt:啊哈,現在它*全部*有道理:) –