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(紀元)以來的毫秒數。
說明
>紀元、時間戳與無效日期
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 的時間戳,這是一個「無效日期」。
console.log(new Date(8.64e15).toString()); // "Sat Sep 13 275760 00:00:00 GMT+0000 (世界協調時間)"
console.log(new Date(8.64e15 + 1).toString()); // "無效日期"
有許多方法可以讓你與儲存在日期中的時間戳互動:
- 你可以使用
getTime()和setTime()方法直接與時間戳值互動。 valueOf()和[Symbol.toPrimitive]()(當傳入"number"時)方法——在數字強制轉換中會自動呼叫——會回傳時間戳,這使得Date物件在數字情境下表現得像它們的時間戳。- 所有靜態方法(
Date.now()、Date.parse()和Date.UTC())都回傳時間戳,而不是Date物件。 Date()建構子可以被呼叫,並以一個時間戳作為唯一的引數。
日期元件與時區
日期在內部表示為一個單一的數字,即時間戳。與其互動時,時間戳需要被解釋為一個結構化的日期和時間表示。總有兩種方式來解釋時間戳:作為本地時間或作為世界協調時間(UTC),這是由世界時間標準定義的全球標準時間。本地時區並未儲存在日期物件中,而是由主機環境(使用者的裝置)決定。
備註:UTC 不應與格林威治標準時間(GMT)混淆,因為它們不總是相等的——這在連結的維基百科頁面中有更詳細的解釋。
例如,時間戳 0 代表歷史上的一個獨特瞬間,但它可以被解釋為兩種方式:
- 作為 UTC 時間,它是 1970 年 1 月 1 日 UTC 的午夜,
- 作為紐約(UTC-5)的本地時間,它是 1969 年 12 月 31 日的 19:00:00。
getTimezoneOffset() 方法回傳 UTC 與本地時間之間的差異(以分鐘為單位)。請注意,時區偏移不僅取決於當前的時區,還取決於 Date 物件所代表的時間,因為有日光節約時間和歷史變更。本質上,時區偏移是在 Date 物件所代表的時間和主機環境所在位置上,相對於 UTC 時間的偏移。
Date 方法有兩組:一組透過將時間戳解釋為本地時間來獲取和設定各種日期元件,而另一組則使用 UTC。