Unix 时间戳与日期互转
这个工具在 Unix 时间戳(从 1970 年 1 月 1 日 00:00:00 UTC 起算的秒数或毫秒数)和人能读懂的日期时间之间互相转换。页面分成两块:上面输入时间戳,下面显示对应的本地时间和 UTC 标准格式;下面选择日期时间,显示对应的秒级和毫秒级时间戳。它只做这两种转换,不支持自定义输出格式、不支持选择其他时区、也不做日期加减或时间差计算。显示的「本地时间」取决于你设备当前的时区设置。
输入 1700000000(10 位),工具把它当作秒,得到 UTC 时间 2023-11-14T22:13:20.000Z;如果你的设备时区是北京时间(UTC+8),本地时间显示为 2023/11/15 06:13:20。输入 1700000000000(13 位)会被当作毫秒,得到完全相同的时刻。反向转换:在时区为 UTC+8 的设备上选择 2024-01-01 00:00:00,得到 1704038400 (秒) 和 1704038400000 (毫秒);而同样的 2024-01-01 00:00:00 如果在 UTC 时区的设备上选择,则得到 1704067200 (秒),两者正好相差 8 小时(28800 秒)。所以在不同时区的设备上,同一个日期会得到不同的时间戳,这是正常现象,因为日期选择框的内容按设备本地时区理解。以上数字都是用同样的 Date 逻辑实际运行得到的。
传统 Unix 时间戳(C、Python 的 time.time()、数据库的 UNIX_TIMESTAMP)是秒,当前通常是 10 位;JavaScript 的 Date.now()、Java 的 System.currentTimeMillis() 是毫秒,当前通常是 13 位。工具按长度自动判断,不需要手动切换。如果你拿到的是 16 位的微秒或 19 位的纳秒时间戳,需要先自行除以 1000 或 1000000 再输入,否则结果会变成非常遥远的年份。
差的几乎总是时区。时间戳本身与时区无关,它指向唯一的一个时刻;只是「本地时间」那一栏会按你设备当前的时区显示。想核对时,看带 Z 的 ISO 部分——那是 UTC,不受设备时区影响,和其他工具的 UTC 结果应当一致。
日期反向转换可以得到负数时间戳。但时间戳转日期方向要小心前面提到的长度判断,负号会占一个字符。对于绝对值很小的负数,比如 -86400,长度没超过 10,可以按秒正常处理;对于 10 位数字的负秒数则会被当成毫秒,需要自行换算。
意思是输入的内容不是纯数字(含字母或其他符号),或者数值大到超出 JavaScript 能表示的日期范围(约正负 1 亿天,即公元前 271821 年到公元 275760 年)。清空输入框或者点击「现在」可以恢复。
转换完全在浏览器本地完成,只使用 JavaScript 自带的 Date 对象。代码里没有向任何服务器发送你输入的时间戳或日期的请求,也不保存历史。「现在」按钮读取的是你设备自己的系统时钟,因此如果设备时间不准,得到的结果也会不准。