我正在尝试使用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小时内的秒数,这是时区之间的差异。