开始了解php dateTime& dateTimezone对象。假设美国/东部的服务器并在另一个时区创建时间,目标是在服务器时间内转换并存储服务器(US / Eastern)上的时间(即伦敦)。使用此代码:
$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开始的那一天并手动进行计算?这仅适用于每个弹簧/秋季开关的第一天。
答案 0 :(得分:0)
$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