Unix 时间戳排错指南
时间戳转换错误通常不是日期算法本身的问题,而是单位、时区或输入精度没有约定清楚。按下面的顺序检查,通常能快速定位。
第一步:确认秒还是毫秒
Unix 时间戳表示从 1970-01-01 00:00:00 UTC 起经过的时间。很多后端语言使用秒,而 JavaScript 的 Date 使用毫秒。把秒误当毫秒会得到接近 1970 年的日期;把毫秒误当秒则可能超出可表示范围。
可复现示例
1767225600 是秒级值;对应的毫秒级值是 1767225600000。两者代表同一时刻,只相差乘数 1000。第二步:分清“时刻”和“显示时区”
时间戳代表统一的绝对时刻,本身不携带“北京时间”或“纽约时间”。同一个值在 UTC+8 浏览器中显示为本地时间,在 UTC 浏览器中会少 8 小时,但它们仍是同一时刻。跨系统传输时,建议同时保留时间戳或带 Z、明确偏移量的 ISO 8601 文本。
第三步:确认输入日期有没有时区
2026-01-01 08:00:00 没有说明时区,不同系统可能按本地时间或 UTC 解析。更明确的写法是 2026-01-01T08:00:00+08:00,或者使用 2026-01-01T00:00:00Z 表示 UTC。
| 现象 | 优先检查 | 处理方式 |
|---|---|---|
| 结果在 1970 年附近 | 秒值被当作毫秒 | 选择秒级单位,或转换前乘以 1000。 |
| 相差固定 8 小时 | UTC 与 UTC+8 混用 | 比较 ISO UTC 值,并明确显示时区。 |
| 相差固定 1000 倍 | 秒与毫秒混用 | 查看接口文档和字段命名,不要只靠位数猜测。 |
| 日期无效或溢出 | 单位错误、非数字、超范围 | 校验输入并缩小到系统支持范围。 |
常见问题
为什么本站不自动根据位数判断单位?
历史日期、未来日期和带小数的值可能破坏位数经验规则。明确选择单位比自动猜测更可控。
夏令时会改变时间戳吗?
不会改变同一时刻的时间戳,但会改变某些地区的本地显示偏移。处理预约时间时还需要保存时区规则。