PHP时间转换结果与谷歌查询结果不一致,哪个正确?
问题根因
你代码的输出结果是正确的,谷歌结果偏差是搜索逻辑导致的:
- 2021年美国夏令时时段为3月14日~11月7日,你使用的转换日期2021年11月8日属于太平洋标准时间(PST)时段,洛杉矶时区偏移为UTC-8:
- UTC时间2021-11-08 18:00:00减8小时,对应洛杉矶当地时间2021-11-08 10:00:00,和你程序输出一致
- 如果你调用
converted_date_time('2021-11-08 04:54:15')得到的结果和预期不符,优先检查你传入的时间是否确实为UTC时间,有没有搞反转换方向
- 谷歌搜索结果偏差的原因:你搜索时没有指定具体转换日期,搜索引擎默认使用当前时段的时区偏移计算:如果当前处于夏令时(PDT,UTC-7),UTC 18点减7小时得到11点,这个结果仅适用于夏令时时段的转换,不适用于你指定的2021年11月8日的历史日期场景。
代码优化建议
你贴出的代码逻辑没有错误,仅存在两处可以优化的点:
date_default_timezone_set("America/Los_Angeles"); echo date_default_timezone_get(); echo '<br>'; function converted_date_time($dt) { $datetime = new DateTime($dt, new DateTimeZone('UTC')); // 下方这行format调用没有赋值也没有输出,属于无效代码,可以直接删除 // $datetime->format('Y-m-d H:i:s'); $datetime->setTimezone(new DateTimeZone(date_default_timezone_get())); // 可以在format中增加O参数输出时区偏移,方便校验结果 例如 return $datetime->format('Y-m-d H:i:s O'); return $datetime->format('Y-m-d H:i:s'); } echo converted_date_time('2021-11-08 18:00:00').'<br>';
如果长期使用时区转换功能,建议保持PHP的timezonedb扩展为最新版本,避免过时的时区规则导致计算偏差。
内容的提问来源于stack exchange,提问作者user16357892
相关产品推荐
相关产品推荐

