Temporal API
Temporal API 即将来临!
JavaScript 的旧 Date 对象存在诸多问题,如缺乏时区支持、DST(夏令时)错误、日期解析不一致和可变性导致的 bug。
Temporal API 是 TC39 提出的新解决方案,旨在取代 Date 对象,提供现代化、可靠的日期和时间处理方式。它支持时区、多种日历系统和精确的时间计算。
基本上等广大浏览器逐步支持 Temporal API
后,广大 npm 包如 moment
、date-fns
和 dayjs
等的使用场景会大大降低。
Temporal.ZonedDateTime:带时区的精确时间
Temporal.ZonedDateTime
是一个结合时间戳、时区和日历系统的对象,用于表示特定时区的精确时刻。
Temporal.ZonedDateTime.from({
timeZone: "Asia/Shanghai",
year: 2025,
month: 5,
day: 30,
hour: 8,
minute: 0,
second: 0,
});
日历系统支持
Temporal API 支持多种日历系统,如伊斯兰、希伯来、中国的日历。
地球上有三个突出的周期性事件:绕太阳自转(365.242天一圈)、月球绕地球自转(29.53天从新月到新月)和绕地轴自转(24小时从日出到日出)。每种文化都有相同的”日”度量,即24小时。
比如国内日历农历有闰月,使用 Temporal API 就可以得到很好的支持。
时间运算
Temporal API 提供强大的时间运算功能,通过 Temporal.Duration 进行加减操作。
例如,创建1小时30分钟的持续时间,添加到 PlainTime、PlainDate 或 ZonedDateTime 上,结果精确且语义清晰。
const dur1 = Temporal.Duration.from({ years: 1 });
const dur2 = Temporal.Duration.from({ months: 1 });
const startingPoint = Temporal.PlainDate.from("2025-05-30");
startingPoint.add(dur1);