BaseToolbox LogoBaseToolbox
Blog

© 2025 基础工具箱。保留所有权利。

隐私政策关于联系我们

Unix 时间戳为什么有秒和毫秒?10 位和 13 位怎么区分

发布于 2026年6月25日

时间戳转换后如果变成 1970 年,或者跑到很遥远的未来,第一件事就是检查单位:这是秒,还是毫秒。

Unix 时间从 UTC 1970 年 1 月 1 日开始计算。真正容易搞错的是不同系统使用的单位不一样。

10 位通常是秒

这样的时间戳通常是秒:

1767225600

在 JavaScript 里要先乘以 1000:

new Date(1767225600 * 1000);

13 位通常是毫秒

这样的时间戳通常是毫秒:

1767225600000

JavaScript 的 Date.now() 返回毫秒,所以可以直接传给 Date:

new Date(1767225600000);

常见错误

不要把已经是毫秒的值再乘 1000:

// 如果 value 已经是毫秒,这就是错的
new Date(1767225600000 * 1000);

这样日期会被推到非常遥远的未来。

怎么安全判断单位

位数是很有用的线索,但不是绝对规则。很早的历史日期、很远的未来排期、被截断的日志值,都可能让位数判断变得不明显。

| 线索 | 常见单位 | 示例 | | -------- | -------- | -------------------- | | 约 10 位 | 秒 | 1767225600 | | 约 13 位 | 毫秒 | 1767225600000 | | 约 16 位 | 微秒 | 一些数据库和日志系统 | | 约 19 位 | 纳秒 | 高精度事件日志 |

如果转换结果接近 1970 年,通常是把秒当成了毫秒。如果结果跑到几千年后,通常是把毫秒又乘了 1000,或者把微秒当成毫秒处理。

API 和数据库里怎么检查

先看字段名和文档。created_at、createdAtMs、expires_in、iat、exp 这些名字可能暗示完全不同的单位。JWT 里的 iat 和 exp 通常是秒;JavaScript 的 Date.now() 是毫秒。

生产代码里最好在边界统一单位。数据进入应用时转换一次,内部传递和存储就固定用同一种单位,避免每个调用点都猜一遍。

简短结论

API 和数据库里常见 Unix 时间戳是秒,JavaScript 里常见的是毫秒。10 位值通常是秒,13 位值通常是毫秒。

参考资料:

  • MDN:Date.now()

想直接试试看?

用我们的免费在线工具,把文章里的方法马上用起来。

转换时间戳