You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP DateTime modify方法异常:2022/03/27 02时缺失问题问询

为什么PHP DateTime计算时缺失了2022/03/27 02时?

核心原因:夏令时(DST)切换

2022年3月27日是欧洲部分实行夏令时的地区(如伦敦、巴黎等时区)的时钟切换日:当地时间凌晨2点时,时钟会直接拨快1小时到凌晨3点,2022/03/27 02:00:00这个时间点在对应时区下是不存在的。

你的PHP环境默认时区应该设置为了这类夏令时时区,当代码执行$from->modify('+1 hour')从01:00:00增加1小时时,DateTime类会自动跳过不存在的02点,直接跳转到03点,因此输出结果里没有02时的记录。

验证时区影响

可以通过以下代码查看当前PHP的默认时区,确认是否为夏令时时区:

echo date_default_timezone_get();

如果输出是Europe/London、Europe/Paris等,即可验证该原因。

解决方法

如果需要生成包含所有逻辑小时的列表(即使该时间在时区中不存在),可以改用UTC时区计算(UTC无夏令时切换):

$from = new DateTime('2022/03/27 00:00:00', new DateTimeZone('UTC'));
$to = new DateTime('2022/03/27 23:59:59', new DateTimeZone('UTC'));

do {
    echo $from->format('Y/m/d H') . "\n";
    $from->modify('+1 hour');
} while ($from->getTimestamp() < $to->getTimestamp());

若需要基于本地时区展示,但要包含逻辑上的02点,也可以手动构造时间字符串,而非依赖modify方法自动计算。


内容的提问来源于stack exchange,提问作者jhernandis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:54:19