JavaScript传入毫秒参数创建Date实例时返回日期异常
问题根因
JavaScript 内置Date构造函数接收数值类型时间参数时,默认单位是自UTC 1970年1月1日0点起经过的毫秒数。你传入的1655154491.8357913是带小数的秒级epoch时间戳,整数部分仅10位,和毫秒级时间戳差了1000倍量级,直接传入会被识别为距离epoch起点仅16亿余毫秒,换算后仅对应1970年1月的日期,完全不符合预期。
修复方法
将拿到的秒级时间戳乘以1000转换为毫秒单位后,再传入Date构造函数即可。注意JS原生Date仅支持毫秒级精度,小数部分转换为毫秒后自动取整不影响常规日期显示:
// 原始值为秒级epoch时间 let dateInSeconds = 1655154491.8357913; // 转毫秒后解析 let parsedDate = new Date(dateInSeconds * 1000).toUTCString(); console.log(parsedDate); // 正确输出:Wed, 15 Jun 2022 05:08:11 GMT
避坑提示
- 快速判断时间戳单位:2000年-2030年区间内,毫秒级epoch时间戳整数部分为13位,秒级epoch时间戳整数部分为10位,传入Date前先做单位校验,就能避免这类单位不匹配的解析错误。
内容的提问来源于stack exchange,提问作者AfootDesert41
相关产品推荐
相关产品推荐

