我得到了以下代码行:
echo (new DateTimeZone('UTC'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
它返回零。但我希望它能返回UTC与America / New_York时区之间的时差。
然后,我两次提供了相同的时区:
echo (new DateTimeZone('America/New_York'))->getOffset(new DateTime('now', new DateTimeZone('America/New_York')));
我希望它返回零,因为时区相同。但是现在返回-18000(这是America / New_York和UTC之间的偏移量)。
在文档中,它说getOffset()始终将偏移量返回给GMT(= UTC)。但是,为什么getOffset不是静态的?如果始终是相对于GMT的偏移量,为什么第一个构造函数中的时区起作用?
我知道DateTime类中还有另一个getOffset方法,该方法更易于使用。但是我想了解DateTimeZone类中的getOffset方法如何工作。
时区的偏移量是与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偏移量并减去它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句