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

MySQL与PHP时区转换结果差1小时,求正确实现方案

时区转换结果差异原因及正确实现方式

差异原因

  • America/Chicago时区在**标准时间(CST)**下的UTC偏移是-06:00,但2023年5月3日处于美国夏令时(CDT)时段,此时该时区的实际UTC偏移为-05:00。
  • SQL的CONVERT_TZ使用了固定的-06:00偏移值,未考虑夏令时规则,直接做了+6小时的转换,因此得到2023-05-03 06:00:00。
  • PHP的DateTime类通过时区名称America/Chicago识别了夏令时规则,按照实际的-05:00偏移完成转换,得到的2023-05-03 05:00:00是符合实际时间的正确结果。

正确实现方式

SQL(MySQL)

避免使用固定偏移值,直接使用时区名称进行转换(需确保MySQL已加载时区数据):

select CONVERT_TZ('2023-05-03 00:00:00', 'America/Chicago', @@global.time_zone);

若MySQL未加载时区数据,需先导入官方时区数据包,再执行上述语句。

PHP

当前写法本身就是正确的,保持使用时区名称而非固定偏移,DateTime会自动处理夏令时、时区规则变更等特殊情况:

$date = new \DateTime('2023-05-03 00:00:00', new \DateTimeZone('America/Chicago'));
$date->setTimezone(new \DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 17:58:14