无需登录 数据私有 本地保存

Temporal API 演练场 - 现代日期时间处理实验

16
0
0
0
Temporal

TC39 Stage 3 提案,旨在取代 JavaScript 中有缺陷的 Date 对象。Temporal 提供了不可变的日期时间对象、明确的类型系统、原生时区支持和纳秒级精度。在本工具中,所有实验代码都使用 Temporal API 编写,通过内置的 polyfill 在当前浏览器中运行。Temporal 的核心理念是「不可变性」——所有操作返回新对象,不修改原对象。

PlainDate

Temporal.PlainDate 表示纯日期(年、月、日),不包含时间和时区信息。适合生日、节假日等不涉及时刻的场景。通过 Temporal.Now.plainDateISO() 可以获取当前日期。PlainDate 支持 .add()、.subtract() 日期运算,以及 .daysInMonth、.dayOfWeek 等只读属性。在本工具的「日期基础」实验中广泛使用。

PlainTime

Temporal.PlainTime 表示纯时间(时、分、秒、纳秒),不包含日期和时区。适合表示每日固定时刻(如「每天上午 9 点」)的场景。支持 .add()、.subtract() 时间运算。在本工具的「时间操作」实验中,PlainTime 常与 PlainDate 组合使用,通过 toPlainDateTime() 构建完整的日期时间对象。

ZonedDateTime

Temporal.ZonedDateTime 是包含日期、时间和时区的完整表示,能正确处理夏令时转换。使用 IANA 时区数据库(如 America/New_York、Asia/Tokyo)。这是 Temporal 中功能最强大的类型,适合会议安排、航班时间等需要精确时区语义的场景。在本工具的「时区处理」实验中重点展示。

Instant

Temporal.Instant 表示绝对时间点,精度为纳秒,可以表示约 27 万年的时间范围。与 Date 的 epochMilliseconds 类似但精度更高。通过 Temporal.Now.instant() 获取当前时刻,通过 .epochMilliseconds 获取毫秒时间戳。在本工具的「格式化与实用」实验中,展示 Instant 与毫秒时间戳的互转。

Duration

Temporal.Duration 表示时间长度,可以包含年、月、周、日、时、分、秒、毫秒、微秒、纳秒等单位的组合。通过 duration.total({ unit: 'hours' }) 可以将 Duration 转换为指定单位的浮点数总和。在本工具的「时间段计算」实验中展示 Duration 的创建、运算和转换。

不可变性(Immutability)

Temporal 对象的每个属性都是只读的,任何「修改」操作都会返回一个新对象。例如 plainDate.add({ days: 1 }) 不会修改 plainDate 本身,而是返回一个新的 PlainDate 对象。这是 Temporal 相比 Date 的核心设计理念——避免 Date.setDate() 等修改原对象的方法带来的副作用和 bug。本工具的所有实验代码都遵循不可变性原则。

Polyfill

Polyfill 是一种在旧环境中提供新 API 实现的技术方案。本工具自动加载 @js-temporal/polyfill,在浏览器原生不支持 Temporal 的情况下提供完整的 Temporal API 实现。Polyfill 体积约 50KB(gzip),与规范保持一致。当浏览器原生支持 Temporal 时,polyfill 会自动让位,代码无需修改即可运行。