tomai
登录

Unix 时间戳:毁掉日期的四个陷阱

Unix 时间戳就是从 1970-01-01 UTC 起算的秒数。简单——但时间戳制造的日期 bug 比任何其他格式都多。四个陷阱解释了大部分。

1. 秒与毫秒

JavaScript 的 Date.now() 返回毫秒;经典 Unix 时间和多数后端日志用秒。10 位数字是秒,13 位是毫秒。混用会把 2026 年变成公元 53000 年——或者 1970 年。

2. UTC 与本地时

时间戳本身没有时区——它在任何地方都是同一瞬间。bug 出在:代码用服务器时区而不是用户时区去转换;或者解析 2026-09-01 08:00 这种字符串时没说明它属于哪个时区。

3. 夏令时跳变

有夏令时的时区一年跳两次。一场会议如果存的是夏令时和冬天各自的本地 09:00,对应的是两个不同的 UTC 瞬间;存 UTC、展示时才转本地时间,能消灭这一整类 bug。

4. 按地区猜测解析

03/04/2026 在一个国家是 3 月 4 日,在另一个国家是 4 月 3 日。从文本解析日期必须显式指定格式——永远不要猜。

实用守则:存 UTC、只在展示时转换、格式永远写明。想检查一个时间戳或日期字符串,用时间戳转换工具世界时钟并排对比——都在浏览器本地运行。