Moving From Moment.js To The JS Temporal API
背景
Moment.js 曾是 JavaScript 日期处理的标准库,但存在以下问题:
- 体积大,增加应用包大小
- 不支持 tree shaking
- 对象可变性导致意外行为
- 2020 年已进入维护模式
Temporal API 状态
截至 2026年3月,Temporal 已达到 TC39 流程的 Stage 4,将被纳入下一个 ECMAScript 规范。
- Chrome 144+ 已支持
- Firefox 139+ 已支持
- Safari 预计即将支持
- 有 polyfill 可用于不支持的环境
核心特性
- 时间与日期分离: 可仅处理时间或仅处理日期
- 时区支持: 完全时区感知,可跨时区转换
- 不可变性: 创建后不可更改,返回新对象
- 1-based 索引: 月份从 1 开始(而非 0)
- 零包体积: 浏览器原生 API,无需引入库
主要类型
// Instant: 精确的时间点(自 epoch 后的纳秒)
const now = Temporal.Now.instant();
// PlainDate: 仅日期
const today = Temporal.PlainDate.from({ year: 2026, month: 3, day: 28 });
// PlainTime: 仅时间
const lunch = Temporal.PlainTime.from({ hour: 12, minute: 0 });
// ZonedDateTime: 特定时区的日期时间
const meeting = Temporal.ZonedDateTime.from({
timeZone: 'America/New_York',
year: 2026, month: 3, day: 28, hour: 14
});
迁移建议
文章提供了实用的"配方":
- 如何创建日期时间对象
- 日期字符串解析
- 格式化输出
- 时间算术运算
- 时区转换
阅读价值
18分钟深度阅读,由 Joe Attardi 撰写。提供了从 Moment.js 迁移到 Temporal API 的完整指南,包括代码示例和最佳实践。
探索时间: 2026-03-28 16:40