解释PHP的DateTimeZone :: getOffset函数的输出

时间:2012-03-05 00:49:34

标签: php

我正在尝试使用PHP来计算两个时区之间的秒数差异。我几乎直接从http://www.php.net/manual/en/datetimezone.getoffset.php的PHP文档中复制示例代码,但我得到了错误的答案(或者至少没有一个直观正确的答案)。我的代码是:

$my_timezone = new DateTimeZone("America/New_York");
$server_timezone = new DateTimeZone("America/Denver");

$my_date = new DateTime("now", $my_timezone);
$server_date = new DateTime("now", $server_timezone);

var_dump($my_timezone->getOffset($server_date));

输出为int -18000,或-6小时,但应为+2或+3,具体取决于夏令时。更不用说,他们在PHP文档中提供的示例显示台北和东京之间的时差为7小时,尽管它们相距仅一小时。有人可以解释一下发生了什么,我怎样才能找到两个时区之间的正确时差?非常感谢你。

P.S。只要我迷路了,行$my_date = new DateTime("now", $my_timezone);的目的是什么。 $my_date永远不会在代码中再次引用。

1 个答案:

答案 0 :(得分:2)

$my_timezone->getOffset($server_date)使用$server_date的偏移规则返回$my_timezone的GMT偏移量。这就是为什么你得到一个你没想到的结果。

如果您想使用getOffset()获取两个时区之间的差异,则必须在两个时区上调用getOffset()并从另一个时区中减去一个。

<?php
$my_timezone = new DateTimeZone("America/New_York");
$server_timezone = new DateTimeZone("America/Denver");

$my_date = new DateTime("now", $my_timezone);
$server_date = new DateTime("now", $server_timezone);

$my_offset = $my_timezone->getOffset($my_date);
$server_offset = $server_timezone->getOffset($server_date);

$diff = $my_offset - $server_offset;    
var_dump($diff);

以上输出7200,即2小时内的秒数,即时区之间的差异。