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

PHP返回PDT时区时间错误是什么原因?如何修复相关配置?

问题原因

  • 不规范使用时区缩写作为参数:PHP官方不推荐使用PDT这类时区缩写作为时区标识符,缩写存在歧义,且不同系统对缩写的适配逻辑不一致。你碰到的情况就是系统将PDT识别为固定UTC-8的太平洋标准时间(PST),而非夏令时状态下UTC-7的PDT,因此输出比预期少1小时。
  • 服务器时区数据库版本过旧:Ubuntu 18.04如果长时间没有更新tzdata(时区数据库)包,旧版数据库的夏令时切换规则可能滞后,误判2021年10月3日已退出夏令时,因此按标准时间计算。

修复方案

  • 替换缩写为标准时区标识符:将代码中的timezone_open('PDT')替换为对应地区的标准「区域/城市」格式标识符,太平洋时区对应America/Los_Angeles,PHP会自动根据日期判断是否启用夏令时,不需要手动指定夏令时缩写。
    修改后的代码示例:
<?php
$date_str_8601 = '2021-10-03T12:30:00Z'; // 输入为12:30 UTC
$dateTime = DateTime::createFromFormat(DateTime::ISO8601, $date_str_8601);
date_timezone_set($dateTime, timezone_open('America/Los_Angeles'));
echo 'PDT ' . date_format($dateTime, 'g:i A'); // 输出:PDT 5:30 AM
date_timezone_set($dateTime, timezone_open('Europe/London'));
echo ', London ' . date_format($dateTime, 'g:i A'); // 输出:London 1:30 PM
  • 更新服务器tzdata包:执行以下命令更新系统时区数据库,更新完成后重启PHP服务生效:
    sudo apt update && sudo apt install -y tzdata
  • 校验PHP时区配置:打开php.ini配置文件,确认date.timezone参数设置为标准时区标识符而非缩写,例如date.timezone = America/Los_Angeles,修改后同样需要重启PHP服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:24:05