Chrome / WebKit 时间戳是从 1601-01-01T00:00:00Z 起算的微秒数。它的源纪元和单位必须跟着一起走——光看数字,你没法知道它属于哪块钟。

换算公式

Unix 毫秒 = WebKit 微秒 / 1000 − 11644473600000

转换器按这个关系给出 Unix 秒、epoch 毫秒、ISO 8601 UTC 和可读的 UTC 值。排查日志或导出数据时,请把原始值也留着,方便日后复核换算是否正确。

容易出错的地方

这个格式和 Windows FILETIME 共用 1601 纪元,但单位是微秒,不是 100 纳秒间隔。

更稳妥的做法

  • 动手算之前,先确认平台和字段名。
  • 数值可能超出 JavaScript 安全整数范围时,用字符串保留原始值。
  • 在边界上一次性转换完,之后只存储和比较单位明确的 Unix 值。
  • 只有在把结果呈现给人看时,才用具名时区做格式化。

相关格式转换器

Frequent questions:

Q: Chrome 的时间戳用的是哪个纪元?
A: Chromium/WebKit 的时间戳计的是自 1601 年 1 月 1 日 00:00:00 UTC 起的微秒数——和 Windows FILETIME 同一个纪元,只是单位是微秒而不是 100 纳秒。
Q: 怎么转换 Chrome 浏览历史里的时间戳?
A: 把值除以 1,000,000,再减去 11,644,473,600,得到以秒计的 Unix 时间戳,然后按日期格式化。
Q: Chrome 的时间戳为什么有 17 位?
A: 因为它以微秒(百万分之一秒)计,而且从 1601 年起算——四百多年的微秒累积起来,自然就是一个 17 位的数字。