PHP时区.为什么偏移为零

  • 本文关键字:时区 PHP php timezone
  • 更新时间 :
  • 英文 :


我无法弄清楚时区的工作方式。为什么此代码将零作为OUPUT产生?它不应该返回10800而不是0?

$myZone   = new DateTimeZone('+0300');
$utcZone  = new DateTimeZone('+0000');
$dateA = new DateTime('now', $myZone);
var_dump($utcZone->getOffset($dateA)); // 0
$dateA->setTimezone($utcZone);
var_dump($utcZone->getOffset($dateA)); // 0
$dateA->modify('+ 3600 seconds');
var_dump($utcZone->getOffset($dateA)); // 0

似乎$ utczone-> getOffset(...(根本不在乎它的参数时区和时间差异。逻辑在哪里?

<?php
$myZone   = new DateTimeZone('+0300');
$utcZone  = new DateTimeZone('+0000');
$dateA = new DateTime('now', $myZone);

$timeOffset = $myZone->getOffset($dateA);
var_dump($timeOffset);

您将返回10800。这是getOffset中的另一种方式。

输出是:int(10800)

getOffset在特定时刻返回时区使用的偏移。

时区在历史上可以具有多个偏移量 - 最常见的情况是夏令时,当偏移时间更改指定期间时。因此,根据一年中的时间,某个时区可以具有不同的偏移。

DateTime参数定义了要检查的瞬间,getOffset将检查时区的历史记录并返回该特定DateTime上使用的一个 - 无论DateTime的时区是什么。在文档中,您可以找到一个示例:http://php.net/manual/en/datetimezone.getoffset.php#refsect1-datemperzone.getoffset-examples

也就是说,当您使用固定的偏移值(例如" 0000"(时,这意味着DateTimeZone对象将始终具有偏移量,一直存在 - 它永远不会改变。这就是为什么当您致电$utcZone->getOffset时,无论您通过哪种DateTime参数,它总是返回零。

如果要日期的偏移,请在DateTime对象上调用getOffset方法。

最新更新