timezone getOffset 方法如何使用 PHP 上的日期?

How does method timezone getOffset uses date on PHP?

我试图了解 PHP 如何使用给定的日期时间来 return getOffset 在 DateTimeZone 对象上产生结果。据我所知,无论我传递什么日期时间,结果总是一样的。

public function testGetOffset()
{
    // UTC offset is 00:00 (0 seconds)
    $timeZoneUtc = new \DateTimeZone('UTC');
    $dateUTC = new \DateTime('now', $timeZoneUtc);

    // America/Sao_Paulo offset is -02:00 (-7200 seconds)
    $timeZoneSP = new \DateTimeZone('America/Sao_Paulo');
    $dateSP = new \DateTime('now', $timeZoneSP);

    // America/New_York offset is -05:00 (-18000 seconds)
    $timeZoneNY = new \DateTimeZone('America/New_York');
    $dateNY = new \DateTime('now', $timeZoneNY);


    $this->assertEquals(0, $timeZoneUtc->getOffset($dateUTC)); // true
    $this->assertEquals(0, $timeZoneUtc->getOffset($dateNY));  // true
    $this->assertEquals(0, $timeZoneUtc->getOffset($dateSP));  // true


    $this->assertEquals(-7200, $timeZoneSP->getOffset($dateUTC)); // true
    $this->assertEquals(-7200, $timeZoneSP->getOffset($dateNY));  // true
    $this->assertEquals(-7200, $timeZoneSP->getOffset($dateSP));  // true


    $this->assertEquals(-18000, $timeZoneNY->getOffset($dateUTC)); // true
    $this->assertEquals(-18000, $timeZoneNY->getOffset($dateNY));  // true
    $this->assertEquals(-18000, $timeZoneNY->getOffset($dateSP));  // true
}

谁能帮我搞定?

偏移量仅在 DST 转换期间发生变化。纽约将于 3 月 11 日从冬令时过渡到夏令时。getOffset 告诉您该时区在特定时间的偏移量。您提供的所有时间都是今天,远在 DST 转换日期之前,因此它们都会产生相同的偏移量。尝试获取 3 月 11 日之前和之后的日期的偏移量以查看差异。

日期是一个绝对时间点,它不依赖于时区。仅当日期格式为字符串时才使用时区。

在内部,代码创建的所有三个 DateTime 对象都存储相同的值:自 1970-01-01 00:00:00 UTC.[=12= 以来的秒数(PHP 7 上的微秒数) ]