我目前使用DateTime的PHP和注意到在PHP的DateTimeZone對象的轉換時間似乎是不正確的。我只用「美國/哈瓦那」時區進行了測試,所以我不確定這是否是一個問題。PHP DateTimeZone轉換似乎是不正確
這方面的一個很好的例子是在這裏:
var_dump((new DateTimeZone("America/Havana"))->getTransitions());
如果「CTRL-F」並查找「2016年3月13日」你會發現,它說的轉變發生在5: 00 AM在2016年3月13日,實際上它應該是在2016年3月13日上午7:00。
我已經嘗試通過安裝外部TimeZone數據庫(timezonedb與pecl準確),但問題似乎仍然存在。我需要這個固定的原因是因爲它似乎與我的日期時間對象搞亂,它不是它應該如何行事。例如,它似乎是添加隨機小時,如果你試圖建立這個日子:
$̶t̶e̶s̶t̶ ̶=̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶(̶"̶2̶0̶1̶3̶-̶0̶3̶-̶1̶3̶ ̶0̶0̶:̶3̶0̶:̶0̶0̶"̶,̶ ̶n̶e̶w̶ ̶D̶a̶t̶e̶T̶i̶m̶e̶Z̶o̶n̶e̶(̶"̶A̶m̶e̶r̶i̶c̶a̶/̶H̶a̶v̶a̶n̶a̶"̶)̶)̶;̶ ̶ ̶
,如果你的var_dump上述變量,它會增加了一小時,這使得沒有任何意義,我̶o̶p̶i̶n̶i̶o̶n̶.̶不管怎麼說,如果任何人可以幫助這將是不可思議的。
UPDATE
我還沒有解決這個問題,但是我似乎已經錯了的上述例子中的一個。現在的問題似乎是,
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana"));
var_dump($test->getOffset());
好像是返回-14400,因爲它認爲,當實際上它應該返回-18000因爲DST還不發生DST已經發生。
你的問題是否可以由夏令時導致? – m69
問題是我的PHP TimeZone DB似乎沒有包含上面提到的正確的轉換日期。這似乎是2個小時了,這就是問題所在。 – startingwars