如何在 JavaScript 中转换时间戳:Unix、ISO 8601 等
Source: Dev.to
时间戳处理是每个 JavaScript 开发者经常做却很少系统性思考的事情——直到因遗漏 * 1000 或意外的时区偏移导致的 bug 进入生产环境。本指南是关于如何 在 JavaScript 中转换时间戳 的完整参考:Unix 秒到 ISO 8601、Date 对象 API、使用 Intl.DateTimeFormat 的时区格式化,以及何时使用像 date‑fns 或 dayjs 这样的库。
想要在 Unix 时间戳和可读日期之间快速转换,请使用我们的 Timestamp Converter ——无需编写代码。
JavaScript Date 对象
内置的 Date 对象是 JavaScript 处理时间的基础。所有时间戳在内部都以自 Unix 纪元(1970 年 1 月 1 日 00:00:00 UTC)以来的 毫秒 为单位存储:
{codeDateBasics}注意: Date 构造函数的月份参数是 从 0 开始计数(January = 0,December = 11)。这个遗留的怪癖无法避免——只需记住它即可。
Unix 时间戳:秒 vs 毫秒
Unix 时间戳传统上计数自纪元以来的 秒。JavaScript 的 Date 使用 毫秒。这种不匹配是无数 bug 的根源:
{codeUnixConvert}快速区分方法:
- 秒 → 大约 10 位数字(例如
1711000000) - 毫秒 → 大约 13 位数字(例如
1711000000000)
如果你从 Python、Go、数据库等获取时间戳,几乎可以肯定是秒 —— 在传给 new Date() 之前 乘以 1000。
ISO 8601:存储和传输日期的正确格式
在数据库中存储日期、在 API 响应中发送日期或将其序列化为 JSON 时,始终使用 ISO 8601。它没有歧义、可以作为字符串进行排序,并且可以在全球范围内解析:
{codeISO8601}规则: 始终包含时区标识符(Z 表示 UTC,或 +HH:MM 偏移)。没有时区的 ISO 字符串是模糊的——不同的环境会将其解释为本地时间,而本地时间会因代码运行地点的不同而改变其实际值。
时区处理
时区错误是最难复现的之一,因为它们取决于机器的本地设置。最安全的做法:将所有时间存储为 UTC,仅在显示时转换为本地时间。
{codeTimezone}Intl.DateTimeFormat API(所有现代浏览器和 Node 12+ 内置)使用 IANA 时区数据库(例如 America/New_York),并自动处理夏令时。避免使用数值 UTC 偏移(+05:30)作为时区 ID——它们无法考虑夏令时。
当你需要在不同的时区检查特定的 Unix 时间戳时,我们的 Timestamp Converter 提供可视化界面完成所有转换。
date-fns:函数式方法
对于需要超出原生 Date API 能力的项目,date‑fns 是最受欢迎的现代选择。它完全支持 tree‑shaking —— 只会打包你实际导入的函数:
{codeDateFns}- 所有
Date对象都被视为不可变(不进行突变)。 - 函数是纯函数 —— 给定相同的输入,总会得到相同的输出。
- 这使得在 React 组件中行为可预测,且易于测试。
- 时区支持位于单独的
date-fns-tz包中。
dayjs:轻量级的 Moment 替代品
如果你正在从 Moment.js(现已进入维护模式)迁移,dayjs 拥有几乎相同的 API,但体积仅约 ~2 KB。插件可以为其扩展 UTC、时区和相对时间支持:
{codeDayjs}- 当你想要熟悉的链式 API 并且需要保持 bundle 大小最小化时,选择 dayjs。
- 当你想要纯函数、以 TypeScript 为先的设计以及细粒度的 tree‑shaking 时,选择 date‑fns。
常用转换速查表
{codeCommonConversions}想要离线使用这些工具吗?DevToolkit 套件(Gumroad 上 9 美元) 将 40 多个开发者工具打包成一个可下载的套件——无需互联网。
摘要
- JavaScript 的
Date使用 毫秒;许多 API 和数据库使用 Unix 秒 — 始终确认你使用的是哪种。 - 使用
Date.now()获取当前 Unix 毫秒;除以 1000 可得到秒。 - 在 ISO 8601 字符串中始终包含时区指示符(
Z或偏移)。 - 使用带 IANA 时区 ID 的
Intl.DateTimeFormat进行考虑夏令时的显示格式化。 - 使用 date‑fns 实现函数式/不可变模式;使用 dayjs 获得轻量的类似 Moment 的 API。
对于临时转换,请使用我们的 Timestamp Converter。
免费开发者工具
如果您觉得本文有帮助,请查看 DevToolkit — 40+ 免费的基于浏览器的开发者工具,无需注册。
热门工具:
JSON Formatter ·
Regex Tester ·
JWT Decoder ·
Base64 Encoder
🛒 在 Gumroad 获取 DevToolkit 入门套件 — 源代码、离线访问等。
