开始学习php的dateTime &dateTimezone时区对象。假设服务器位于美国/东部,并在另一个时区创建时间,目标是在服务器时间(美国/东部)上转换和存储时间(即伦敦时间)。使用以下代码:
$runTime = '2013-04-10 07:45:00';
$serverTimezone = new DateTimeZone ( 'US/Eastern');
$checkinTimezone = new DateTimeZone ( 'Europe/London');
$checkinTime = new DateTime ( $runTime, $serverTimezone );
$offset = $serverTimezone -> getOffset ( $checkinTime );
echo "<br/><pre>";
echo 'London: ' . date ( 'Y-m-d H:i', $checkinTime -> format ( 'U' ) ) . "<br/>";
echo "<br/>offset: " . $offset . "<br/>";
echo 'Local: ' . date ( 'Y-m-d H:i', $checkinTime -> format ( 'U' ) + $offset );
-14400总是返回,无论是在今天之前还是之后(欧洲今天早些时候切换到夏时制)。在aha时刻,我发现getOffset的文档说Returns the timezone offset from GMT
。
是否有简单的方法将该时间转换为美国/东部时间?我是否必须进入getTransitions,找到DST开始的日期并手动进行计算?
$fromZone = new DateTimeZone('US/Eastern');
$toZone = new DateTimeZone('UTC'); // assuming the server is going to be UTC going forwards
$dt = new DateTime('2013-04-02 10:00:00', $fromZone);
$dt->setTimezone($toZone);
echo $dt->format('Y-m-d H:i:s');
输出:2013-04-02 14:00:00
。
根据需要切换时区。
如果你只处理时间戳,你可以简化一些事情:
$fromZone = new DateTimeZone('US/Eastern');
$dt = new DateTime('2013-04-02 10:00:00', $fromZone);
echo $dt->getTimestamp();
输出:1364911200