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

PHP中将毫秒级时间戳转换为格式化日期字符串结果异常

解决PHP纪元时间戳转格式化日期的错误问题

这个问题我太熟悉了——你踩了一个非常常见的时间戳单位坑!

问题根源

你使用的1104555600000是毫秒级纪元时间戳,但PHP的date()函数默认只接受秒级时间戳作为参数。直接把毫秒数传进去,相当于把时间放大了1000倍,自然会算出一个早得离谱的日期(1993年那个结果就是这么来的)。

两种解决方案

方案1:手动转换为秒级时间戳

最简单的方式就是把毫秒数除以1000,并且确保结果是整数(避免浮点精度问题):

$dateStart = 1104555600000;
// 转换为秒级时间戳,用intval确保是整数
$timestampInSeconds = intval($dateStart / 1000);
$formattedDate = date('Y-m-d', $timestampInSeconds);
echo $formattedDate; // 输出:2005-01-01

方案2:使用DateTime类(更推荐)

面向对象的方式更灵活,也能避免很多时间处理的坑,直接支持毫秒时间戳的转换:

$dateStart = 1104555600000;
// 用@符号加秒级时间戳初始化DateTime
$date = new DateTime('@' . intval($dateStart / 1000));
$formattedDate = $date->format('Y-m-d');
echo $formattedDate; // 输出:2005-01-01

如果需要精确处理毫秒(比如后续要保留毫秒信息),可以用更严谨的写法:

$dateStart = 1104555600000;
$date = DateTime::createFromFormat('U.u', sprintf('%.3f', $dateStart / 1000));
$formattedDate = $date->format('Y-m-d');
echo $formattedDate; // 输出:2005-01-01

小提醒

以后处理时间戳的时候一定要注意单位:PHP原生的时间函数(date()、time()等)都是基于秒级的,而很多前端框架、数据库或者第三方API返回的是毫秒级时间戳,转换的时候别忘除以1000哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:14:20