PHP 对于设置时区的 DateTimeImmutable 对象返回错误的时间戳

问题描述 投票:0回答:1

我想记录具有时区的日期的时间戳。

我想使用 PHP 和 DateTimeImmutable 对象来做到这一点。不幸的是,尽管我认为我设置的时区是正确的,但它似乎晚了 1 小时。这是我的代码:

date_default_timezone_set("EDT");
$myDate = new DateTimeImmutable("08/30/2024 4:00 PM",new DateTimeZone("EDT"));
echo $myDate.getTimestamp();

预期结果:1725048000

实际结果:1725051600(我检查了一堆在线转换器,例如https://www.unixtimestamp.com/,这个时间戳肯定是下午 5:00 EDT,而不是下午 4:00)

这是在 PHP 7.4 上运行

php datetime timezone
1个回答
0
投票

我不确定为什么要这样做,但我的猜测是由于特定 PHP 版本 IANA 时区数据库中存在一些差异。

所有这些 EOL 版本的结果都是相同的

  • 10.5.5 - 38.5.5
  • 5.6.0 - 5.6.40
  • 7.0.0 - 7.0.33
  • 7.1.0 - 7.1.33
  • 7.2.0 - 7.2.34
  • 7.3.0 - 7.3.33
  • 7.4.0 - 7.4.33
  • 8.0.0 - 8.0.20
  • 8.1.0 - 8.1.7

如果您放弃全局无意义的时区缩写并使用真正的 IANA TZ 标识符(如 America/New_York

),您
可以

获得正确的结果
$myDate = new DateTimeImmutable(
    '08/30/2024 4:00 PM',
    new DateTimeZone('America/New_York')
);

https://3v4l.org/h4V0N

© www.soinside.com 2019 - 2024. All rights reserved.