我正在尝试使用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
永远不会在代码中再次引用。
答案 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小时内的秒数,即时区之间的差异。