相关疑难解决方法(0)

使用DateTime/DateTimeZone在PHP中调整时区

关于在PHP中进行时区调整有很多信息,但由于所有的噪音,我没有找到具体的答案.

考虑到一个时区的时间,我想将其转换为另一个时区的时间.

基本上就是我想要做的,但我需要能够只使用内置的PHP库而不是PEAR Date.

这就是我一直在做的事情,但似乎总是给我相对于GMT的偏移量:

$los_angeles_time_zone = new DateTimeZone('America/Los_Angeles');
$hawaii_time_zone = new DateTimeZone('Pacific/Honolulu');

$date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));

$time_offset = $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);
Run Code Online (Sandbox Code Playgroud)

这是输出:

洛杉矶时间:2009-09-18T05:00:00-07:00
抵消:-36000

我期待3个小时(10800秒).但是'-7:00'的事情告诉我它保留了与GMT相关的一切,这也许可以解释为什么它给了我"绝对"的偏移.

如何在没有这个GMT hoohah的情况下获得两个时区之间的偏移量?

谢谢.

更新:

我发现我能做到这一点并得到我想要的东西:

    $date_time_los_angeles = new DateTime('2009-09-18 05:00:00', $los_angeles_time_zone);
printf("LA Time: %s<br/>", $date_time_los_angeles->format(DATE_ATOM));

$date_time_hawaii = new DateTime('2009-09-18 05:00:00', $hawaii_time_zone);
printf("Hawaii Time: %s<br/>", $date_time_hawaii->format(DATE_ATOM));


$time_offset = $los_angeles_time_zone->getOffset($date_time_los_angeles) - $hawaii_time_zone->getOffset($date_time_los_angeles);
printf("Offset: %s<br/>", $time_offset);
Run Code Online (Sandbox Code Playgroud)

但对我来说这感觉很尴尬.有人知道更清洁的方法吗?

php timezone datetime

5
推荐指数
1
解决办法
6567
查看次数

标签 统计

datetime ×1

php ×1

timezone ×1