
Rust 与 Postgres 构建 CRUD API 全教程
在 JavaScript 中处理日期和时间一直是开发者的挑战。传统的 Date API 不够灵活,易出错,因此许多开发者依赖第三方库。
Temporal API 的出现,为日期时间处理带来了革命性的改变。
由于 Temporal API 仍在提案阶段,主流浏览器尚未完全支持,可通过 @js-temporal/polyfill
使用:
npm install @js-temporal/polyfill
import '@js-temporal/polyfill';
完成后即可在项目中使用 Temporal API 功能。
Temporal 提供两类主要数据类型:Plain 类型和 Zoned 类型。
表示不含时区的日期或时间,适合不需特定时区的场景,例如 PlainDateTime
:
const plainDateTime = Temporal.PlainDateTime.from('2023-10-15T10:00');
console.log(plainDateTime.toString()); // 2023-10-15T10:00:00
表示带时区的日期和时间,例如 ZonedDateTime
:
const zonedDateTime = Temporal.ZonedDateTime.from({
year: 2023,
month: 10,
day: 15,
hour: 10,
timeZone: 'America/New_York'
});
console.log(zonedDateTime.toString()); // 2023-10-15T10:00:00-04:00[America/New_York]
const date = Temporal.PlainDate.from('2023-03-31');
const newDate = date.add({ days: 1 });
console.log(newDate.toString()); // 2023-04-01
with
方法修改特定字段,返回新实例:
const date = Temporal.PlainDate.from('2023-10-15');
const updatedDate = date.with({ year: 1999, month: 5 });
console.log(updatedDate.toString()); // 1999-05-15
减少不必要的时区计算和格式转换,适合高性能应用。
强制使用 ISO 格式,解析结果始终一致:
const date = Temporal.PlainDate.from('2023-10-15');
console.log(date.toString()); // 2023-10-15
避免意外修改原对象,提高代码可维护性:
const date = Temporal.PlainDate.from('2023-10-15');
const newDate = date.add({ days: 1 });
console.log(date.toString()); // 原始对象未变: 2023-10-15
console.log(newDate.toString()); // 新实例: 2023-10-16
const date = Temporal.ZonedDateTime.from('2023-03-12T02:30[America/New_York]');
const adjustedDate = date.round({ smallestUnit: 'minute', roundingMode: 'floor' });
console.log(adjustedDate.toString()); // 自动调整到有效时间
try {
const timeZone = Temporal.TimeZone.from('Invalid/TimeZone');
} catch (error) {
console.error('无效的时区标识符');
}
特性 | Temporal API | Moment.js | date-fns |
---|---|---|---|
内置支持 | ✅ | ❌ | ❌ |
时区支持 | ✅ | ✅ | ❌ |
不可变性 | ✅ | ❌ | ✅ |
性能优化 | ✅ | ❌ | ✅ |
Temporal API 是 JavaScript 日期时间处理的未来。通过不可变性、显式时区支持和一致解析规则,它彻底解决了传统 Date API 的痛点。对于追求现代化、高效且可靠的日期处理方式的开发者,Temporal API 是最佳选择。