如何使用JavaScript从PHP生成的秒级时间戳获取UTC日期?
搞定UTC日期提前一天的坑
嘿,这个问题我之前帮朋友排查过,核心原因其实很容易忽略:PHP生成的是秒级时间戳,但JavaScript的Date构造函数认的是毫秒级时间戳!你直接把PHP的秒戳丢进去,相当于把时间往回拨了1000倍,自然会得到不对的日期(你遇到的提前一天,大概率是你的时间戳刚好是当天凌晨的秒数,换算成毫秒后落在了前一天的UTC时段里)。
怎么修复?两步走:
- 先把PHP传过来的秒级时间戳乘以1000,转成JS能识别的毫秒级时间戳
- 再用你原来的逻辑去生成UTC格式化日期就ok了
完整的示例代码:
// 假设arrivalDate是PHP给的秒级时间戳,比如1609459200(对应2021-01-01 UTC) var arrivalDate = 1609459200; var newdate = new Date(arrivalDate * 1000); // 重点就在这一步:乘1000转毫秒! var tempdate = newdate.getUTCFullYear()+'-'+('0' + (newdate.getUTCMonth()+1)).slice(-2)+'-'+('0' + newdate.getUTCDate()).slice(-2); console.log(tempdate); // 这下就能输出正确的UTC日期:2021-01-01
额外小技巧:
其实你可以用JS自带的方法简化日期格式化,不用自己拼字符串:
var tempdate = newdate.toISOString().split('T')[0]; // 同样会得到YYYY-MM-DD格式的UTC日期,代码简洁多了
要是你确认PHP的时间戳是基于本地时间而非UTC的,那可能还要额外调整,但一般PHP的time()函数返回的都是UTC的秒级时间戳,所以乘1000这一步基本就能解决问题啦。
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

