我想记录具有时区的日期的时间戳。
我想使用 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 版本 IANA 时区数据库中存在一些差异。
所有这些 EOL 版本的结果都是相同的
如果您放弃全局无意义的时区缩写并使用真正的 IANA TZ 标识符(如 America/New_York
),您可以获得正确的结果
$myDate = new DateTimeImmutable(
'08/30/2024 4:00 PM',
new DateTimeZone('America/New_York')
);