开发 · 阅读约 2 分钟 ·
Unix 时间戳:秒还是毫秒?
每周都会被带进生产环境的“13 位数字”bug,以及区分这两种单位的一条简单规则。

JavaScript 使用毫秒,大多数后端使用秒。两者一旦混用,日期就会落到 1970 年 1 月,或者几万年后的未来。
数一数位数
当前以秒为单位的时间戳有 10 位(1790000000 是 2026 年 9 月 21 日)。同一时刻用毫秒表示有 13 位,微秒 16 位,纳秒 19 位。
判断规则
如果绝对值大于 10¹²,就是毫秒;否则按秒处理。这条规则适用于 2001 年 9 月之后的任何毫秒时间戳,以及 33658 年之前的任何秒级时间戳。
const ms = Math.abs(n) > 1e12 ? n : n * 1000;
明确选择单位
4Dev 时间戳转换器不会猜测:"Unix Timestamp" 表示秒,"Unix Timestamp (ms)" 表示毫秒,旁边还有微秒和纳秒格式。一共支持 33 种格式,包括 ISO 8601、RFC 2822、SQL DATETIME 和 Excel 序列日期。