有人可以告诉我DateTimeZone :: getOffset PHP函数如何工作吗?

Somega

我得到了以下代码行:

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之间的偏移量)。

文档中,它说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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章