我有来自特定时区(牙买加)的时间戳,我想获得它的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