1

开始了解 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 总是返回,无论是在今天之前还是之后(欧洲今天早些时候切换到 DST)。瞬间,我发现 getOffset 的文档Returns the timezone offset from GMT

有没有一种简单的方法可以将该时间转换为美国/东部时间?我是否必须进入 getTransitions,找到 DST 开始的日期并手动进行计算?这仅在每个春季/秋季切换的第一天很重要。

4

1 回答 1

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

于 2013-04-02T14:21:59.007 回答