PHP中UTC高精度时间格式转换失败,求解决方案
问题解答
时间格式说明
你提到的2022-09-30T21:39:25.220185674Z属于ISO 8601标准的UTC时间格式:
T是日期与时间的分隔符.220185674是纳秒级的时间精度(9位小数)- 末尾的
Z表示该时间属于UTC时区(祖鲁时区)
转换失败原因
你使用strtotime()失败的核心原因是:该函数在处理带有9位小数的高精度ISO 8601时间时存在兼容性问题(PHP 7.3及更早版本对这种格式的支持有限),解析后返回false。而date()函数接收false时会将其当作时间戳0处理,最终输出Unix纪元初始时间(1970-01-01 01:00:00,这是时区偏移后的结果)。
正确转换方法
使用PHP的DateTime类可以完美支持这种高精度时间格式,示例代码如下:
方法1:直接解析并格式化(默认UTC时区)
$datetime = new DateTime('2022-09-30T21:39:25.220185674Z'); echo $datetime->format('Y-m-d H:i:s'); // 输出:2022-09-30 21:39:25
方法2:转换为指定时区(例如北京时间)
如果需要将UTC时间转换为本地时区,可通过setTimezone()调整:
$datetime = new DateTime('2022-09-30T21:39:25.220185674Z', new DateTimeZone('UTC')); $datetime->setTimezone(new DateTimeZone('Asia/Shanghai')); echo $datetime->format('Y-m-d H:i:s'); // 输出:2022-10-01 05:39:25
内容的提问来源于stack exchange,提问作者Lyra
相关产品推荐
相关产品推荐

