2015-09-07 139 views
0

我目前使用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已經發生。

+0

你的問題是否可以由夏令時導致? – m69

+0

問題是我的PHP TimeZone DB似乎沒有包含上面提到的正確的轉換日期。這似乎是2個小時了,這就是問題所在。 – startingwars

回答

0
$test = new DateTime("2013-03-13 00:30:00", new DateTimeZone("America/Havana")); 

結果:

public 'date' => string '2013-03-13 00:30:00.000000' (length=26) 
public 'timezone_type' => int 3 
public 'timezone' => string 'America/Havana' (length=14) 

它沒有添加一個小時。

你想達到什麼目的?更多信息將有助於您更好地回答問題。

看着你的例子看起來像你試圖將日期時間轉換爲某個指定的時區。如果這就是你的目標是,我會強烈建議Carbon

+0

你說得對,它似乎確實創建了DateTime對象。上次測試時,我一定做了不正確的事情。現在要更新我的問題,我不得不說,如果使用$ test-> getOffset(),偏移量將不正確,我將其用於特定目的。在這種情況下,它會返回-14400,當它應該仍然返回-18000。 – startingwars