1234567890 是一个以秒为单位的 Unix 时间戳,它代表 2009-02-13T23:31:30Z

同一瞬间的毫秒形式

JavaScript Date 要的是毫秒,所以等价的值是 1234567890000

const seconds = 1234567890;
const date = new Date(seconds * 1000);

console.log(date.toISOString());
// 2009-02-13T23:31:30.000Z

单位弄错时的典型结果

1234567890 直接传给 new Date(),它会被当成毫秒,于是得到 1970-01-15T06:56:07.890Z。这个日期不是什么解析玄学,就是秒和毫秒弄混了。

在区间查询里用它

单个时间戳很适合拿来当测试夹具或已知事件的参照点。要查一段日期区间,请在目标时区里算出起点和下一个边界,然后用左闭右开的比较:大于等于起点,小于下一个起点。

Frequent questions:

Q: Unix 时间戳 1234567890 是哪一天?
A: 1234567890 作为 Unix 秒对应 2009-02-13T23:31:30.000Z,也就是 2009 年 2 月 13 日(星期五)23:31:30 UTC。
Q: 1234567890 换成毫秒是多少?
A: 1234567890000 毫秒表示的是同一瞬间——这正是 JavaScript Date 和 Java Instant 所需要的形式。
Q: 为什么 new Date(1234567890) 显示的是 1970 年?
A: 因为 JavaScript Date 接收的是毫秒。这个秒值被当成毫秒之后,就落到了 1970 年初。请改用 new Date(1234567890 * 1000)。
Q: 在 shell 里怎么转换 1234567890?
A: Linux 用 date -u -d @1234567890,macOS 用 date -u -r 1234567890。两条命令都会返回 UTC 日期。