如何将 Unix 时间戳转换为可读日期
快速解答
Unix 时间戳 = 自 1970-01-01 00:00:00 UTC 以来的秒数(或毫秒)。使用 JavaScript 中的 new Date(timestamp * 1000)(秒)或 new Date(timestamp)(毫秒)转换为日期。使用 Math.floor(date.getTime() / 1000) 将日期转换回来。使用我们的时间戳转换器可以在浏览器中立即完成这两项操作。
介绍
Unix 时间戳(也称为纪元时间或 POSIX 时间)是自 1970-01-01 00:00:00 UTC(Unix 纪元)以来经过的秒数,不包括闰秒。它是计算中时间的通用语言,因为它是与时区无关且可简单排序的单个整数。大多数系统都使用秒; JavaScript 和许多数据库使用毫秒。
步步
-
了解秒与毫秒
大多数后端系统和 APIs 使用秒(10 位时间戳直到 2286)。 JavaScript 的 Date 和 Java 的 Instant 使用毫秒(13 位数字)。始终确认 API 需要哪个单位 - 混合它们会将日期移动 1000 倍(偏差约 31 年)。
-
将时间戳转换为可读日期
将时间戳粘贴到时间戳转换器中。它按长度(10 与 13 位)检测秒与毫秒,并以 UTC 和您当地的时区显示日期。在代码中: new Date(1700000000 * 1000).toISOString() 返回 '2023-11-14T22:13:20.000Z'。
-
将日期转换为时间戳
在转换器中输入日期和时间;它返回 Unix 时间戳。在代码中: Math.floor(new Date('2026-08-28T12:00:00Z').getTime() / 1000) 返回纪元秒。始终指定时区(Z 或偏移量)以避免当地时间歧义。
-
正确处理时区
Unix 时间戳始终是 UTC — 它们没有时区。仅在表示层转换为本地显示。切勿将本地时间存储为时间戳;存储 UTC 并在显示时进行转换。将 IANA 时区名称 (America/New_York) 与 Intl.DateTimeFormat 结合使用以实现正确的 DST 处理。
-
计算日期之间的差异
减去两个时间戳即可得到以秒(或毫秒)为单位的差异。分钟除以 60,小时除以 3600,天数除以 86400。使用我们的日期差异工具来计算适合人类的范围,或使用年龄计算器来计算基于出生日期的年龄。
示例
Unix时代
输入: 0 (seconds)
输出: 1970-01-01 00:00:00 世界标准时间
纪元后十亿秒
输入: 1000000000 (seconds)
输出: 2001-09-09 01:46:40 世界标准时间
UTC 时间 2026 年初
输入: 2026-01-01T00:00:00Z
输出: 1767225600(秒)/1767225600000(毫秒)
两个日期之间的差异
输入: 1767225600 - 1700000000
输出: 67225600 seconds = 778.08 days ≥2 years 31 days
常见问题
- 秒与毫秒的混淆:读作毫秒的 10 位时间戳给出了 1970 年的日期;读取为秒的 13 位时间戳会溢出 32 位 int。通过位数检测单位或将其明确记录在 API 中。
- 将本地时间存储为时间戳:时间戳为 UTC。如果您在设置为 UTC-5 的浏览器中计算 Date.now() 并将结果视为本地结果,则 DST 转换将使您的数据每年两次移动一个小时。
- 2038-01-19 03:14:07 UTC (Y2038) 发生 32 位溢出:使用带符号的 32 位秒时间戳的系统无法表示此点之后的日期。在新系统中使用 64 位或毫秒时间戳。
- 忽略闰秒:Unix 时间戳跳过闰秒,因此两个时间戳之间的差异不等于经过的 SI 秒数。大多数应用程序可以忽略这一点;高精度的天文学和金融则做不到。
提示
- 始终以 UTC 格式存储和传输时间戳;仅在显示层使用 Intl.DateTimeFormat 和 IANA 时区转换为本地时间。
- 使用 ISO 8601 字符串(例如 2026-08-28T12:00:00Z)作为人类可读的 APIs 和时间戳进行存储 - ISO 字符串明确携带其时区并且明确。
- 比较时间戳时,双方使用相同的单位(秒或毫秒)——单位不匹配是最常见的日期错误之一。
- 在调试期间使用我们的时间戳转换器对 API 响应进行健全性检查 - 它显示 UTC 和本地时间,以便您可以立即发现时区错误。