PHP时区。为什么偏移量为零?

PHP时区。为什么偏移量为零?,php,timezone,Php,Timezone,我搞不懂时区是怎么工作的。为什么这段代码会产生零输出?它不应该返回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_du

我搞不懂时区是怎么工作的。为什么这段代码会产生零输出?它不应该返回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(…)根本不关心它的参数时区和时差。逻辑在哪里?

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

<?php

$myZone   = new DateTimeZone('+0300');
$utcZone  = new DateTimeZone('+0000');

$dateA = new DateTime('now', $myZone);


$timeOffset = $myZone->getOffset($dateA);
var_dump($timeOffset);
时区在历史期间可以有多个偏移量-最常见的情况是夏令时,偏移量在指定时间段内发生变化。因此,根据一年中的时间,某个时区可以有不同的偏移量

datetime参数定义要检查的时刻,
getOffset
将检查时区的历史记录并返回在该特定日期时间使用的历史记录-无论datetime的时区是什么。在文档中,您可以找到以下示例:

也就是说,当您使用固定的偏移量值(如“+0000”)时,这意味着
DateTimeZone
对象将始终具有该偏移量—它永远不会更改。这就是为什么当您调用
$utcZone->getOffset
时,无论传递什么datetime参数,它总是返回零


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

似乎$myZone->getOffset($dateA)根本不关心$dateA时区。有什么意义?