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

取消夏令时后PHP DateTimeZone中America/Mexico_City时区偏移错误

问题分析与解决方案

你的代码本身没有问题,出现这个偏移错误的核心原因是PHP依赖的系统时区数据库(tzdata)版本过旧,没有包含墨西哥2022年取消夏令时的最新规则。

PHP的DateTimeZone类的时区规则完全依赖于系统或PHP内置的tzdata,旧版本的tzdata里仍然保留着墨西哥之前的夏令时切换逻辑,所以会计算出错误的UTC-5偏移。

解决步骤:

  • 检查当前时区数据库版本
    可以通过以下方式确认:

    • Linux终端执行:zdump -v America/Mexico_City,查看输出里的时区规则是否包含2022年后取消夏令时的条目。
    • PHP中执行:
      $tz = new DateTimeZone('America/Mexico_City');
      var_dump($tz->getTransitions(time() - 31536000, time() + 31536000));
      
      查看输出的转换记录,如果仍然有夏令时的切换时间,说明tzdata未更新。
  • 更新时区数据库

    • Linux系统:根据发行版执行更新命令,比如Debian/Ubuntu:
      sudo apt update && sudo apt install tzdata
      
      CentOS/RHEL:
      sudo yum update tzdata
      
      更新后需要重启PHP服务(如php-fpm、apache等)。
    • Windows系统:可以更新PHP到包含最新tzdata的版本,或者安装timezonedb扩展并配置使用。
  • 验证修复效果
    重新运行你的代码:

    $dateTimeZone = new DateTimeZone('America/Mexico_City');
    $date = new DateTime('NOW');
    $offset = $dateTimeZone->getOffset($date);
    var_dump($offset); // 应输出int(-21600),对应UTC-6
    

如果更新tzdata后问题依然存在,再考虑向PHP官方提交Bug,但绝大多数情况都是时区数据未更新导致的。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 03:47:05