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

JavaScript Date.now转PHP日期异常:Carbon转换结果与原JS日期不符

哈哈,这个坑我踩过!问题核心是JavaScript和Carbon对「时间戳」的定义不一样~

问题根源

JavaScript的Date.now()返回的是毫秒级时间戳(从1970-01-01 UTC到现在的总毫秒数),但Carbon的createFromTimestamp()方法默认只认秒级时间戳。你直接把毫秒数传进去,相当于把时间往后推了N个世纪,日期当然对不上啦!

两种解决办法

根据你的实际场景选就行:

办法1:前端先转成秒级时间戳再传

发起请求时,把Date.now()的结果除以1000并取整,再作为参数发送:

// 前端代码示例
const timestamp = Math.floor(Date.now() / 1000);
// 然后将timestamp作为time参数传入Ajax请求

后端就可以继续用你原来的代码了:

$now = \Carbon\Carbon::createFromTimestamp($request->input('time'));

办法2:后端直接处理毫秒时间戳

如果不想改动前端代码,Carbon专门提供了处理毫秒级时间戳的方法createFromTimestampMs(),用这个一步到位:

// 推荐写法:用Carbon的毫秒专用方法
$now = \Carbon\Carbon::createFromTimestampMs($request->input('time'));

// 也可以手动除以1000(注意要做浮点运算,避免整数截断问题)
$now = \Carbon\Carbon::createFromTimestamp($request->input('time') / 1000);
额外提醒:时区一致性

如果按上面的方法改完还是有偏差,记得检查前后端的时区设置!比如前端默认用本地时区,而Carbon默认可能用服务器时区(或UTC)。可以统一指定时区,比如转成上海时区:

$now = \Carbon\Carbon::createFromTimestampMs($request->input('time'))->setTimezone('Asia/Shanghai');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:25:59