Temporal API: 终结Date的痛苦——时区、历法和精确时间运算
使用全新的Temporal对象(PlainDate, ZonedDateTime, Duration)进行无陷阱的日期时间操作。 · 难度:入门 · +10XP
Temporal API: 终结Date的痛苦——时区、历法和精确时间运算
JS的Date对象有无数陷阱(月份从0开始、时区隐式转换、缺乏日期运算支持)。Temporal API(Stage 3)提供了不可变的、类型安全的日期时间类型。本教程覆盖:PlainDate(仅日期)、PlainTime(仅时间)、ZonedDateTime(带时区)、Duration(时间长度)、Calendar(非公历支持)等。你将学习如何安全地计算“下个月的第5个星期二”、在不同时区之间转换、处理夏令时避免重复时间,以及用Temporal.Duration实现精确的时间加减。最后比较Temporal与Luxon、date-fns的设计差异。
// Temporal 示例
const today = Temporal.Now.plainDateISO();
const nextWeek = today.add({ days: 7 });
const zoned = Temporal.ZonedDateTime.from({
timeZone: 'Asia/Shanghai',
year: 2025, month: 1, day: 15, hour: 10
});
console.log(zoned.toLocaleString());