此頁面由社群從英文翻譯而來。了解更多並加入 MDN Web Docs 社群。

View in English Always switch to English

Date

Baseline
Widely available
*

This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.

* Some parts of this feature may have varying levels of support.

JavaScript 的 Date 物件以平台獨立的格式表示一個特定的時間點。Date 物件封裝了一個整數,代表自 1970 年 1 月 1 日 00:00:00 UTC(紀元)以來的毫秒數。

備註:隨著 Temporal API 的引入,Date 物件被視為一個遺留功能。建議在新程式碼中使用 Temporal,並在可能的情況下將現有程式碼遷移至 Temporal(請查看瀏覽器相容性)。我們很快會撰寫一份使用指南!

說明

紀元、時間戳與無效日期

JavaScript 日期基本上被指定為自紀元以來經過的毫秒數,紀元被定義為 1970 年 1 月 1 日 00:00:00 UTC 的午夜(相當於 UNIX 紀元)。這個時間戳是時區無關的,並唯一地定義了歷史上的一個瞬間。

備註:雖然 Date 物件核心的時間值是 UTC,但獲取日期和時間或其元件的基本方法都在本地(即主機系統)時區和偏移量下運作。

Date 物件可表示的最大時間戳略小於最大安全整數(Number.MAX_SAFE_INTEGER,即 9,007,199,254,740,991)。Date 物件相對於紀元最多可以表示 ±8,640,000,000,000,000 毫秒,或 ±100,000,000(一億)天。這個範圍是從西元前 271821 年 4 月 20 日到西元 275760 年 9 月 13 日。任何試圖表示此範圍之外時間的嘗試,都會導致 Date 物件持有一個值為 NaN 的時間戳,這是一個「無效日期」。

js
console.log(new Date(8.64e15).toString()); // "Sat Sep 13 275760 00:00:00 GMT+0000 (世界協調時間)"
console.log(new Date(8.64e15 + 1).toString()); // "無效日期"

有許多方法可以讓你與儲存在日期中的時間戳互動:

日期元件與時區

日期在內部表示為一個單一的數字,即時間戳。與其互動時,時間戳需要被解釋為一個結構化的日期和時間表示。總有兩種方式來解釋時間戳:作為本地時間或作為世界協調時間(UTC),這是由世界時間標準定義的全球標準時間。本地時區並未儲存在日期物件中,而是由主機環境(使用者的裝置)決定。

備註:UTC 不應與格林威治標準時間(GMT)混淆,因為它們不總是相等的——這在連結的維基百科頁面中有更詳細的解釋。

例如,時間戳 0 代表歷史上的一個獨特瞬間,但它可以被解釋為兩種方式:

  • 作為 UTC 時間,它是 1970 年 1 月 1 日 UTC 的午夜,
  • 作為紐約(UTC-5)的本地時間,它是 1969 年 12 月 31 日的 19:00:00。

getTimezoneOffset() 方法回傳 UTC 與本地時間之間的差異(以分鐘為單位)。請注意,時區偏移不僅取決於當前的時區,還取決於 Date 物件所代表的時間,因為有日光節約時間和歷史變更。本質上,時區偏移是在 Date 物件所代表的時間和主機環境所在位置上,相對於 UTC 時間的偏移。

Date 方法有兩組:一組透過將時間戳解釋為本地時間來獲取和設定各種日期元件,而另一組則使用 UTC。

元件 本地 UTC
獲取 設定 獲取 設定
getFullYear() setFullYear() getUTCFullYear() setUTCFullYear()
getMonth() setMonth() getUTCMonth() setUTCMonth()
日(月份中的日期) getDate() setDate() getUTCDate() setUTCDate()
getHours() setHours() getUTCHours() setUTCHours()
getMinutes() setMinutes() getUTCMinutes() setUTCMinutes()