Unix 时间戳排错指南

时间戳转换错误通常不是日期算法本身的问题,而是单位、时区或输入精度没有约定清楚。按下面的顺序检查,通常能快速定位。

主题:日期与时间最后核对:2026-07-24

第一步:确认秒还是毫秒

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 倍秒与毫秒混用查看接口文档和字段命名,不要只靠位数猜测。
日期无效或溢出单位错误、非数字、超范围校验输入并缩小到系统支持范围。

常见问题

为什么本站不自动根据位数判断单位?

历史日期、未来日期和带小数的值可能破坏位数经验规则。明确选择单位比自动猜测更可控。

夏令时会改变时间戳吗?

不会改变同一时刻的时间戳,但会改变某些地区的本地显示偏移。处理预约时间时还需要保存时区规则。