时间戳秒与毫秒怎么区分?排查 1970 年和时区偏差
接口返回一串数字,转成日期后却落在 1970 年,或与日志相差 8 小时。先分别确认单位和时区,再检查转换公式。不要用固定加减 8 小时的方式掩盖问题。
打开工具:Unix 时间戳转换1. 先用同一时刻做对照
把下面的数值逐个放入时间戳工具,数字输入分别选择秒或毫秒。它们应得到同一个 UTC 结果。日期输入则需要明确时区。
Seconds: 1788768000
Milliseconds: 1788768000000
UTC: 2026-09-07T08:00:00.000Z
UTC+08:00: 2026-09-07T16:00:00+08:002. 按接口约定选择单位
当前常见时间戳通常是 10 位秒数或 13 位毫秒数,但位数只能当作线索。接近 1970 年或表示更远日期的值不满足这个经验。优先检查字段文档、类型或名称,例如 createdAtMs。
JavaScript Date 的数字输入以毫秒计量。秒数进入 Date 前乘以 1000;毫秒转为完整秒可向下取整,但会丢弃毫秒部分。保留原始精度时,应继续存储毫秒值。
const seconds = 1788768000;
const milliseconds = seconds * 1000;
console.log(new Date(milliseconds).toISOString());
// 2026-09-07T08:00:00.000Z
console.log(Math.floor(milliseconds / 1000));
// 17887680003. 出现 1970 年,检查是否把秒当作毫秒
new Date(1788768000) 会得到 1970-01-21T16:52:48.000Z,因为它只表示从起点经过了约 17.9 亿毫秒。若同一个值来自以秒为单位的字段,就应使用 new Date(1788768000 * 1000)。
在本站先选「秒」,转换 1788768000;再选「毫秒」,转换 1788768000000。两次 UTC 输出应相同。如果只在某一条调用链上错误,检查是否漏乘或重复乘了 1000。
4. 区分时刻与本地显示
2026-09-07T08:00:00Z 和 2026-09-07T16:00:00+08:00 指向同一个时刻。Z 表示 UTC;+08:00 表示该文本的本地时间比 UTC 快 8 小时。时间戳本身不用再加上这 8 小时。
本站的 UTC 字段方便跨设备比较;「本地时间」跟随设备时区。日期文本必须带 Z 或明确偏移。要查看某个命名时区中的定时任务,使用 Cron 工具选择对应时区,而不是手动修改时间戳。
5. 用往返转换检查结果
复制转换结果中的 UTC 日期,重新粘贴并转换,检查 Unix (ms) 是否一致。再用 0 和 -1 秒检查起点及负数处理。若业务要求保留毫秒,比较 Unix (ms),不要只比较向下取整后的秒字段。
- 确认单位来自接口定义,而不是猜测。
- 确认日期文本包含实际时区。
- 确认乘除 1000 只发生在需要的边界。
- 比较 UTC 与原始毫秒值,避免被本地显示差异误导。