解释PHP的输出';s DateTimeZone::getOffset函数


Interpreting the output of PHP's DateTimeZone::getOffset function

我正在尝试使用PHP来计算两个时区之间的秒差。我几乎是直接从PHP文档中复制示例代码http://www.php.net/manual/en/datetimezone.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);
var_dump($my_timezone->getOffset($server_date));

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

附言:只要我迷路了,$my_date = new DateTime("now", $my_timezone);线的用途是什么。CCD_ 3在代码中不再被引用。

$my_timezone->getOffset($server_date)使用$my_timezone的偏移规则返回$server_date的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小时内的秒数,这是时区之间的差异。