JavaScript 终于从 Go 那里“抄”来了新的日期和时间函数
刚刚看到一条推特1说火狐最先支持2了“Temporal”。由于我是火狐的长期用户,并且以前一直被教育说“火狐对标准的支持一般比Chrome慢几年”,所以我就仔细看了一眼,看看这到底是个什么情况。
等等,“Temporal”是个啥单词、啥意思?没见过。噢,继续看了才知道:原来是一个全新的、用来替换 Date
的标准。意为“时间的”。看起来这些人是真的很能选新词汇啊,以前在C++里面第一次看到“std::chrono”3的时候也是这种感觉。
我很早就吐槽过 JavaScript 中的 Date
真是极其难用。比如:
- 过于简陋,内部只是一个 int64 表示毫秒/纳秒;
- 格式化过于复杂:《W3C 总是能给我整出恶心的东西,为什么把一个 Date 赋值给 [代码...》;
- 不支持时区,不能按时区格式化。为此我还特意把时间发送给后端来格式化为指定的时区对应的时间4;
- 也为此,我还实现了自己的带时区的日期时间:scripts/header.js#L68-L95。
标题说“从 Go 那里‘抄’来了”没有依据,仅仅是我个人的推断5:
- 看到了
Duration
/Now
等类型/函数; Duration
包含add()
/subtract()
等方法;Instant
包含add()
/subtract()
/since()
/until()
等方法;ZonedDateTime
表示带时区的日期时间。这个会非常有用。
对于时区,JavaScript 和 Go 都建议使用“时区的名字”而不是“时区的偏移”6。
除时区外,Temporal
还有看起来比 Go 的 Time
远远复杂的多种日历系统支持。
太好了,赶紧的!
-
Wes Bos on X: "ITS HAPPENING Firefox 127 ... the first browser to support Temporal ^
-
Standard library header
<chrono>
(C++11) - cppreference.com ^ -
我觉得 JavaScript 中的很多 API 真的应该像 Go 学学。简单、实用,足够易用。 ^