10 位和 13 位时间戳有什么区别?
解释 10 位秒级时间戳和 13 位毫秒级时间戳的区别,附接口、数据库和前端场景里的判断方法。
打开时间戳转换工具核心区别是精度不同
10 位时间戳通常表示秒,13 位时间戳通常表示毫秒。两者都以 1970-01-01 00:00:00 UTC 为起点,只是记录的最小单位不同。
前端 JavaScript 的 Date 常用毫秒,很多后端接口、数据库字段和日志系统则可能使用秒。接口联调时,如果把 10 位秒级时间戳当毫秒用,日期会落到 1970 年附近;如果把 13 位毫秒当秒用,日期会跑到非常遥远的未来。
- 10 位示例:1717200000,常见于 PHP、Unix 命令和部分服务端接口。
- 13 位示例:1717200000000,常见于 JavaScript Date.now() 和前端日志。
- 秒转毫秒:乘以 1000;毫秒转秒:除以 1000 并取整。
接口排查怎么判断单位
最简单的方法是看数字长度,再转换为北京时间确认是否合理。如果一个字段叫 created_at、expired_at、updated_at,转换后应该落在业务发生日期附近。
还可以结合语言习惯判断:Java 的 System.currentTimeMillis 是毫秒;Python time.time 返回秒,但可能带小数;JavaScript Date.now 返回毫秒。
数据库和日志里的常见坑
同一个系统里最好统一时间单位,并在字段名或接口文档里写清楚。例如 expireAtMs、createdAtSeconds 这类命名能减少误用。
如果需要展示给用户,时间戳还要结合时区。中国用户看到的一般是北京时间,即 UTC+8。
常见问题
13 位时间戳能直接除以 1000 吗?
可以。通常除以 1000 后取整就是对应的秒级时间戳。
为什么转换后差 8 小时?
这是 UTC 和北京时间的时区差异。北京时间是 UTC+8,展示时需要按目标时区格式化。
时间戳一定是 10 位或 13 位吗?
不是。早期或未来日期位数可能变化,也可能出现带小数的秒级时间戳。判断时要结合字段含义。