时间戳转换器

将 Unix 时间戳转换为可读日期,也可反向转换;编辑任意一方,两边都会实时同步。

Unix 时间戳

日期和时间

什么是 Unix 时间戳?

自 1970 年 1 月 1 日起的秒数(或毫秒数)。

Unix 纪元是 1970 年 1 月 1 日 UTC 零点。时间戳就是自那时起经过的秒数(或毫秒数),因此它可以像普通数字一样排序和比较,而不像格式化的日期字符串那样。

秒和毫秒的区别

Unix、Linux 以及大多数后端 API 使用秒。JavaScript 自身的 Date.now() 和大多数前端代码使用毫秒。混淆这两者是最常见的时间戳错误之一——把一个「秒」值粘贴到「毫秒」字段中,结果会落在 1970 年附近。

工作原理

一切都通过浏览器的 Date 对象处理,该对象内部只存储一个数字:自 Unix 纪元(1970 年 1 月 1 日 UTC 零点)以来的毫秒数。转换时间戳时,如果你选择了「秒」,工具会先乘以 1000,构建一个 Date 对象,然后以四种方式呈现:通过 toLocaleString(浏览器的 Intl 格式化器,使用你自己的时区和语言)显示本地时间、UTC、ISO 8601,以及一个通过将与当前时刻的差值归入年、月、日、时、分或秒来计算出的「3 天后 / 2 小时前」相对时间标签。

反过来,日期选择器的值会被解析为本地时间,再转换回秒和毫秒。datetime-local 字段的填充方式是先按你的时区偏移量对时间戳进行平移,这是大多数转换工具容易出微妙错误的细节:toISOString() 始终以 UTC 表示,如果没有这一步平移,选择器显示的时间会与你预期的挂钟时间相差数小时。

这个工具通过明确单位来防范一个经典错误:秒 vs 毫秒。当前的 Unix 时间在「秒」单位下是 10 位数字,在「毫秒」单位下是 13 位数字。把一个毫秒值当作秒来解析,你会跳到 5 万多年后的未来;反过来则会得到 1970 年 1 月。如果转换结果看起来很荒谬,切换一下单位下拉框,几乎总能解决问题。超出范围的值(JavaScript 日期在纪元两侧最多支持 1 亿天,大约到公元 275760 年)会给出清晰的错误提示,而不是无意义的结果。

所有解析和格式化都是本地浏览器 API 的工作。转换时打开开发者工具的 Network 面板:不会发出任何请求,你日志里的时间戳永远不会离开你的电脑。