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

PHP中UTC转CST结果与在线工具不符,求正确转换方法

UTC转CST时间差1小时的问题排查与解决

我来帮你捋清楚这个问题——核心原因在于CST这个时区缩写本身存在歧义,不同地区的CST对应的时区偏移完全不一样:

  • 美国中部标准时间(Central Standard Time):非夏令时为UTC-6,夏令时(CDT)切换为UTC-5
  • 中国标准时间(China Standard Time):固定为UTC+8
  • 还有澳大利亚中部标准时间等其他变体

你用在线工具得到的05/29/2018 6:44 AM,对应的是美国中部夏令时(UTC-5);但PHP里直接传入'CST'作为时区参数时,默认解析的是美国中部标准时间(UTC-6),这就导致了结果差1小时。

解决方法:使用无歧义的IANA时区标识符

PHP的DateTimeZone支持IANA官方时区标识符,这些标识符不会有歧义,推荐优先使用:

  • 美国中部时区(自动识别夏令时切换):America/Chicago
  • 中国标准时间:Asia/Shanghai

修改你的函数调用,把模糊的'CST'替换成对应的明确标识符即可:

function date_convert($dt, $tz1, $df1, $tz2, $df2) {
    // 创建DateTime对象
    $d = DateTime::createFromFormat($df1, $dt, new DateTimeZone($tz1));
    // 转换时区
    $d->setTimeZone(new DateTimeZone($tz2));
    // 转换日期格式并返回
    return $d->format($df2);
}

// 转换为美国中部夏令时(和在线工具结果一致)
echo date_convert('2018-05-29 11:44:00', 'UTC', 'Y-m-d H:i:s', 'America/Chicago', 'Y-m-d H:i:s');
// 输出:2018-05-29 06:44:00

如果你的需求是转换为中国标准时间,就用'Asia/Shanghai':

echo date_convert('2018-05-29 11:44:00', 'UTC', 'Y-m-d H:i:s', 'Asia/Shanghai', 'Y-m-d H:i:s');
// 输出:2018-05-29 19:44:00

补充说明

2018年5月29日处于美国中部的夏令时时段(每年3月第二个周日到11月第一个周日),使用America/Chicago会自动切换到UTC-5的偏移,和在线工具的结果完全匹配;而直接用'CST'会强制使用UTC-6的标准时间,自然就差了1小时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:56:27