2021 年真正的问题是:
如果Date 从 JS 的第一天就被破坏了,为什么 26 年后(如果从零开始算起 25)它仍然存在?
JS 有很多不好的部分/怪癖,最糟糕的是其中一些在 几十年 中都没有得到修复(有趣的事实:我们正在谈论 Date 日期)。
但我们很幸运,看起来Date 的结尾快到了。
剧透
new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
时间(提案)
来自提案介绍:
Date 一直是 ECMAScript 的痛点。这是针对 Temporal 的提议,这是一个充当顶级命名空间(如 Math)的全局 Object,它为 ECMAScript 语言带来了现代日期/时间 API。
根据文档中的报告,它基于“我们检查的常见用例”,并且针对不同类型的数据具有多种类型:
-
Plain 类型没有时区
-
ZonedDateTime 类型有一个时区
- 大多数类型都有日历
- 许多有用的类型:
Absolute, DateTime, Date, Time, TimeZone, ...
这是一个概述各种Temporal 类型及其关系的架构
您可以在可用的documentation 和漂亮的cookbook 中阅读更多关于它们的信息。或者探索当前的issues 以获得开放的。
Temporal 何时可用
由于March '21,它处于第三阶段/草稿(参见TC39 stages reference)。请参阅 TC39 March '21 slides。
现在它可以很快被包含在 TypeScript 中,因为他们的policy 是:
当新功能达到第 3 阶段时,它们就可以包含在 TypeScript 中了。
对于 Node 和主流浏览器,我们可能需要等待更多时间。
今天开始试验
与此同时,您可以使用Temporal polyfill 进行试验。
npm install --save proposal-temporal
// temporal-test.js
const { Temporal } = require('proposal-temporal');
// or as an ES module
// import { Temporal } from 'proposal-temporal/lib/index.mjs';
// 11 means November now!
const date = new Temporal.PlainDate(2020, 11, 26); // => 2020-11-26
const sameDate = Temporal.PlainDate.from(
{year: 2020, month: 11, day: 26}); // => 2020-11-26