Frontend

JavaScript 原生時間日期處理庫 - Temporal

介紹 Temporal 的時間日期處理

temporal

Introduction

Temporal 是 JavaScript 中即將推出的原生日期和時間處理 API(目前處於 Stage 3 提案階段),主要要解決現有 Date API 的多項不足,它提供了更強大、更精確且更易於使用的功能,使開發者能夠更有效地處理日期和時間相關的操作。

主要特點包括:

  • 不可變性:所有操作都會返回新物件,防止意外的資料修改
  • 高精度:支援奈秒級別的時間精度,超越了 Date 的毫秒級別
  • 時區支援:內建強大的時區處理能力,支援所有 IANA 時區
  • 豐富的功能:支援更複雜的日期和時間運算,如日曆計算、重複事件等
  • 嚴格的字串格式:提供統一的解析和格式化標準
  • 支援非公曆系統:內建多日曆系統支援

安裝(僅適用於支援的環境)

npm install @js-temporal/polyfill

Temporal 尚未被所有瀏覽器和 Node.js 版本原生支援,目前仍處於實驗階段,建議在使用前引入 polyfill

與熱門的 dayjs & moment 的差異

dayjsmoment 是目前 JavaScript 中非常流行的日期處理庫,但它們也存在一些限制和問題。以下是 Temporal 相較於這兩者的主要差異:

特性Temporaldayjs & moment
原生支援是(即將成為標準的一部分)否,需要額外安裝庫
不可變性所有物件不可變,防止副作用moment 物件可變,dayjs 不可變
時間精度支援奈秒級別毫秒級別
時區處理原生支援 IANA 時區,操作更簡便需要額外外掛或手動處理時區
效能更優化的效能表現moment 有效能瓶頸,dayjs 輕量化
API 設計現代化、清晰且一致的 API 設計moment API 複雜,dayjs 簡潔但功能有限
型別支援完整的 TypeScript 支援需要額外的型別定義

核心概念

Temporal 提供了多個專門的類別來處理不同的時間日期場景,每個類別都有其特定的用途和優勢:

API 參考

  • Temporal.Now.instant()
    • 類型: Temporal.Instant
  • Temporal.Now.zonedDateTimeISO()
    • 類型: Temporal.ZonedDateTime
  • Temporal.Now.plainDateISO()
    • 類型: Temporal.PlainDate
  • Temporal.Now.plainTimeISO()
    • 類型: Temporal.PlainTime
  • Temporal.PlainDateTime.from()
    • 類型: Temporal.PlainDateTime
  • Temporal.PlainYearMonth.from()
    • 類型: Temporal.PlainYearMonth
  • Temporal.PlainMonthDay.from()
    • 類型: Temporal.PlainMonthDay
  • Temporal.Duration.from()
    • 類型: Temporal.Duration

說明

  1. Hook (useCountdown)
    • 參數:目標時間的 ISO 格式字串,可以根據團隊喜好去客製化期望的格式
    • 狀態:包含倒數計時的 Temporal.Duration
    • 效果:使用 setInterval 每秒更新一次狀態,確保倒數計時實時刷新
    • 回傳值:返回當前的倒數計時狀態

總結

Temporal 作為下一代的日期時間處理標準,提供了更直覺的 API 設計、更安全的不可變特性、更完整的時區支援、更精確的時間處理和更好的型別支援,雖然目前仍處於提案階段,但其設計和功能都非常完善,值得開始學習和嘗試使用,隨著它逐漸成為 JavaScript 標準的一部分,掌握 Temporal 將有助於在未來的開發中更高效地處理日期和時間相關的需求。

參考資源:

Last updated on