【问题标题】:Can someone tell me how the DateTimeZone::getOffset PHP function works?有人能告诉我 DateTimeZone::getOffset PHP 函数是如何工作的吗?
【发布时间】:2020-03-22 20:49:12
【问题描述】:

我得到了这行代码:

echo (new DateTimeZone('UTC'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));

它返回零。但我希望它能够返回 UTCAmerica/New_York 时区之间的差异。

然后我两次提供了相同的时区:

echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));

我希望它返回零,因为时区是相同的。但它现在返回 -18000(这是 America/New_YorkUTC 之间的偏移量)。

documentation 中,它说 getOffset() 始终将偏移量返回到 GMT (=UTC)。但是为什么 getOffset 不是静态的呢?如果总是相对于 GMT 的偏移量,为什么第一个构造函数中的时区会起作用?

我知道 DateTime 类中还有另一个 getOffset 方法更易于使用。但我想了解 DateTimeZone 类中的 getOffset 方法是如何工作的。

【问题讨论】:

    标签: php timezone timezone-offset


    【解决方案1】:

    时区的偏移量是与 UTC 相差多少小时。时区的偏移量可能会在一年中发生变化,具体取决于DST 何时生效和失效。所以你不能像那样得到时区的偏移量,因为它不是一个常数值。您只能询问一个时区它与 UTC 的偏移量是多少在给定时间。这就是您将 DateTime 对象传递给 getOffset 的原因:询问时区它的偏移量值是多少给定的时间。例如:

    echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime), PHP_EOL;
    echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('+6 months'));
    
    -18000
    -14400
    

    如果您想获得两个任意时区之间的偏移差异,您可以获取它们各自的 UTC 偏移并减去它们。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-20
      • 2020-10-20
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      相关资源
      最近更新 更多