我有來自特定時區(牙買加)的時間戳,我想獲得它的GMT時間戳。有沒有更好的解決方案不止這一個:時區日期時間與PHP中的偏移量,讓它變得容易
$start = DateTime::createFromFormat('U', 1330560000);
$start->setTimezone(new DateTimeZone('America/Jamaica'));
$start->format('Y-m-d H:i:s');//2012-02-29 19:00:00 NO NO NO
$tz = new DateTimeZone('America/Jamaica');
$transition = $tz->getTransitions($start->getTimestamp(),$start->getTimestamp());
$offset = $transition[0]['offset'];
$start = DateTime::createFromFormat('U', $params['start'] - 2*$transition[0]['offset']);
$start->setTimezone(new DateTimeZone('America/Jamaica'));
$start->format('Y-m-d H:i:s'); // "2012-03-01 05:00:00" YESSSS!!!
時間戳在時區之間是不變的。具體來說,'1330560000'是2012-03-01 00:00:00 UTC。如果這不是您想要的時間,那麼產生此時間戳的代碼就會出錯。 – Jon
@Jon 1330560000是牙買加(或其他沒有DST的時區),我需要UTC時間(2012-03-01 05:00:00) – user1222955
@ user1222955:不,1330560000不是「牙買加時間」。它是一個特定的時刻*,它是UTC的00:00:00和牙買加的2012-02-29 19:00:00(顯而易見,UTC-5)。 PHP在這裏做的是正確的;這是你的期望是錯誤的。如果應該達到的結果是您所期望的結果,那麼產生時間戳的代碼也是錯誤的。 – Jon