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

PHP时区Bug:America/Santiago时区凌晨1点前时间被加1小时

问题:America/Santiago时区下凌晨1点前的时间被自动加1小时

问题原因

这是智利夏令时(DST)切换导致的规则性时间修正。

2022年9月4日是智利当年夏令时启动的日期,当地时区规则会在当天凌晨00:00直接将时钟拨快1小时到01:00,也就是说原有的00:00-01:00这个时间段在该时区的时间体系里是不存在的。PHP的日期解析函数会自动处理这种无效时间,将其映射到下一个有效的时间点,也就是直接加1小时。

验证场景

  • 当输入04/09/2022 00:32:27时,这个时间落在被“跳过”的无效区间内,因此被自动修正为01:32:27
  • 输入04/09/2022 01:22:11时,该时间已经是夏令时切换后的有效时间,所以不会被调整

处理建议

如果需要精准控制这类无效时间的解析逻辑,可以尝试以下方式:

  • 解析时显式指定时区参数,避免依赖全局时区设置:
$timezone = new DateTimeZone('America/Santiago');
$dateTest = DateTime::createFromFormat('d/m/Y H:i:s', '04/09/2022 00:32:27', $timezone);
  • 使用date_get_last_errors()检查解析过程中的警告,确认是否发生了时间修正:
date_default_timezone_set('America/Santiago');
$dateTest = date_create_from_format('d/m/Y H:i:s', '04/09/2022 00:32:27');
print_r(date_get_last_errors());

该函数会返回包含warning_count和warnings的数组,提示你时间是否因为时区规则被调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:35:21