本篇文章更新時間:2026/03/12
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知或向一介資男的 LINE 社群反應。
如果本站內容對你有幫助,歡迎贊助支持 。
內容目錄
重新理解 JavaScript 的時間:Temporal 的漫長誕生史與真正意義
副標:從 Date 的歷史包袱,到跨公司共同完成的現代時間 API
編輯前言:這篇由 Bloomberg 工程師 Jason Williams 撰寫的長文,完整梳理 Temporal 如何從 2017 的一紙提案,走到 2026 年正式進入 ECMAScript。對於任何曾被 JavaScript 的 Date 傷過的人來說,這篇文章能讓你真正理解:為什麼我們需要 Temporal,以及它是如何誕生的。
文章來源:Temporal: The 9-Year Journey to Fix Time in JavaScript
核心觀點 (Key Takeaways)
- JavaScript 的 Date 是 1995 年在十天內誕生、直接複製 Java 的產物,天生帶著大量設計限制。
- 隨著 Web 極度成長,Date 的缺陷(可變性、解析不一致、DST 問題等)成為全球工程師的痛點。
- Temporal 是跨瀏覽器、跨公司、跨標準組織,以九年協作打造的現代化時間 API,提供不可變性、明確的時區、日曆支援與可靠的算術行為。
深入解析
Jason 以非常完整的脈絡,把 Temporal 的誕生講得像是一段技術史。讀完後,我重新理解一件事:JavaScript 的漏洞,往往不是因為程式語言本身,而是歷史壓力與早期網路需求的折衷造成的。
「It was a straight port of Java’s Date code … in a 10-day sprint」
也就是說,Date 一開始就只是「十天內抄 Java」、勉強可用的版本。沒想到三十年後,我們還在用它。
Date 的原罪:可變、含糊、不可靠
文章整理出 Date 三大致命問題:
- 可變性(Mutable):稍不注意就會改到原本的 Date 對象。
- 月份算術混亂:像 1 月 31 加一個月會跳到 3 月 2 號。
- 解析不一致:不同瀏覽器對「近似 ISO 字串」會得到不同結果。
我自己看完覺得最有感的是:Date 的 API 完全無法反映真實世界的時間邏輯,尤其跨時區、跨 DST、一堆歷史 timezone patch,Date 根本處理不來。
Temporal:九年打造的新時間模型
Temporal 的目標不是修補 Date,而是打造「真正能反映現代軟體需求的時間系統」。
Temporal 帶來的幾個核心類型:
- Temporal.ZonedDateTime:最接近取代 Date 的型別,具備時區、不可變、DST-aware。
- Temporal.Instant:高精度(奈秒級)的 UTC 時間戳。
- Temporal.PlainDate / PlainTime 系列:無時區、無 DST,純粹的「牆上時間」。
- Temporal.Duration:可靠的時間差運算。
Jason 分享的一句話,我覺得道出為何 ZonedDateTime 是關鍵:
「If you don't know which type to use, start with Temporal.ZonedDateTime.」
因為絕大多數真實世界的時間錯誤,都是時區惹的禍。
跨公司協作,是 Temporal 最大的亮點
這篇文章另一個啟發,是看到 Temporal 完全靠跨組織合作打造:
- Bloomberg
- Microsoft
- Mozilla
- Igalia
- Boa
- 多位獨立專家
尤其是 Rust 版本的 temporal_rs 庫,讓多個 JavaScript 引擎共用時間邏輯,這在 TC39 歷史上幾乎前所未見。
Jason 甚至說:
「Temporal is the biggest addition to ECMAScript since ES2015」
這句話其實非常重量級,因為 ES2015 之前與之後的 JavaScript 幾乎是兩個世界。
筆者心得與啟發
讀完這篇文章,我最大的感受是:Temporal 並不是一個 API 更新,而是一種價值觀的改變。
過去十幾年,我們在 JavaScript 處理時間的方式,是堆補丁、裝 moment.js、硬扭曲 Date 的語意。整個生態與標準組織早就知道問題,但誰也無法單獨解決。
Temporal 的誕生代表三件事:
- 真正以現代 Web 的規模重新思考時間模型
- 跨瀏覽器共享程式庫的可能性被證明
- JavaScript 不再被 1995 年的十天決策所綁架
作為一個工程師,我最期待的是:未來我們在寫 code 時,不再需要為了時區或 DST 的 bug 花上數小時(甚至數週)。Temporal 的語意更明確、行為更一致,也更貼近真實世界。
如果你曾因為 Date 的行為崩潰,Temporal 絕對值得你完全重新認識。這篇文章不只是技術介紹,更是 JavaScript 社群如何共同解決歷史技術債的最佳案例。
