Moving From Moment.js To The JS Temporal API

来源: Smashing Magazine | 评分: ★★★★☆ | 标签: JavaScriptAPICoding

背景

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