Date.parse()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Date.parse()
靜態方法會解析一個日期的字串表示法,並回傳該日期的時間戳。
嘗試一下
// 標準日期時間字串格式
const unixTimeZero = Date.parse("1970-01-01T00:00:00Z");
// 類似 toUTCString() 的非標準格式
const javaScriptRelease = Date.parse("04 Dec 1995 00:12:00 GMT");
console.log(unixTimeZero);
// 預期輸出:0
console.log(javaScriptRelease);
// 預期輸出:818035920000
語法
Date.parse(dateString)
參數
dateString
-
一個日期時間字串格式的字串。關於使用不同格式的注意事項,請參見連結的參考資料。
回傳值
描述
此函式對於基於字串值設定日期值很有用,例如與 setTime()
方法結合使用。
parse()
可以處理的格式沒有明確指定,但有幾個不變量:
- 必須支援日期時間字串格式(由
toISOString()
產生)。 - 如果
x
是任何毫秒數為零的 Date 物件,那麼x.valueOf()
應該等於以下任何一個:Date.parse(x.toString())
、Date.parse(x.toUTCString())
、Date.parse(x.toISOString())
。這意味著由toString()
和toUTCString()
產生的格式也應該被支援。 - 規範不要求支援由
toLocaleString()
產生的格式。然而,主要引擎都嘗試支援toLocaleString("en-US")
格式。
其他格式是由實作定義的,可能無法在所有瀏覽器中運作。如果需要容納許多不同的格式,一個函式庫會有所幫助。事實上,Date.parse()
的不可靠性是引入 Temporal
API 的動機之一。
因為 parse()
是 Date
的一個靜態方法,所以你總是將其作為 Date.parse()
使用,而不是作為你所建立的 Date
物件的一個方法。
範例
使用 Date.parse()
以下呼叫都會回傳 1546300800000
。第一個會隱含 UTC 時間,因為它只有日期,而其他的則明確指定了 UTC 時區。
Date.parse("2019-01-01");
Date.parse("2019-01-01T00:00:00.000Z");
Date.parse("2019-01-01T00:00:00.000+00:00");
以下呼叫未指定時區,將會被設定為系統本地時區的 2019-01-01 00:00:00,因為它同時有日期和時間。
Date.parse("2019-01-01T00:00:00");
toString() 與 toUTCString() 格式
除了標準的日期時間字串格式外,也支援 toString()
和 toUTCString()
的格式:
// toString() 格式
Date.parse("Thu Jan 01 1970 00:00:00 GMT-0500 (Eastern Standard Time)");
// 在所有時區的所有實作中皆為 18000000
// toUTCString() 格式
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT");
// 在所有時區的所有實作中皆為 0
非標準日期字串
備註: 本節包含實作特定的行為,這些行為在不同瀏覽器或不同版本的瀏覽器之間可能不一致。這並非一個全面的瀏覽器相容性表格,你在程式碼中使用任何格式之前,都應該進行自己的測試。
當日期字串非標準時,實作通常預設為本地時區。為了一致性,我們將假設執行環境使用 UTC 時區,除非另有說明,否則輸出將隨設備的時區而異。本地時區的日光節約時間(DST)也可能對此產生影響。
這裡有一些非標準日期字串的更多範例。瀏覽器在解析日期字串時非常寬鬆,可能會丟棄任何它們無法解析的字串部分。出於相容性的原因,瀏覽器通常會互相複製行為,所以這些處理模式傾向於跨瀏覽器傳播。如前所述,以下範例僅供說明,絕非詳盡無遺:
描述 | 範例 | Chrome | Firefox | Safari |
---|---|---|---|---|
單一數字 | 0 (單一位數) |
946684800000(2000 年 1 月 1 日);在 Firefox ≤122 中為 NaN | -62167219200000(0000 年 1 月 1 日) | |
31 (兩位數) |
NaN | -61188912000000(0031 年 1 月 1 日) | ||
999 (三/四位數) |
-30641733102000(0999 年 1 月 1 日) | |||
使用不同分隔符的日期字串 | 1970-01-01 (標準) |
在所有時區中皆為 0 | ||
1970/01/01 |
0 | |||
1970,01,01 |
0 | NaN | ||
1970 01 01 |
0 | NaN | ||
類似 toString() 的字串 |
Thu Jan 01 1970 00:00:00 Thu Jan 01 1970 Jan 01 1970 00:00:00 Jan 01 1970 |
0 | ||
類似 toUTCString() 的字串 |
Thu, 01 Jan 1970 00:00:00 Thu, 01 Jan 1970 01 Jan 1970 00:00:00 01 Jan 1970 |
0 | ||
日期的第一個部分是兩位數 | 01-02-03 (第一部分可以是有效的月份) |
1041465600000(2003 年 1 月 2 日) | -62132745600000(0001 年 2 月 3 日) 注意:Safari 總是假設為 YY-MM-DD,但對於斜線則為 MM/DD/YY。 |
|
27-02-03 (第一部分可以是有效的日期但不是月份) |
NaN | -61312291200000(0027 年 2 月 3 日) | ||
49-02-03 (第一部分不能是有效的日期且小於 50) |
2495923200000(2049 年 2 月 3 日) | -60617980800000(0049 年 2 月 3 日) | ||
50-02-03 (第一部分不能是有效的日期且大於等於 50) |
-628300800000(1950 年 2 月 3 日) | -60586444800000(0050 年 2 月 3 日) | ||
超出範圍的日期部分 | 2014-25-23 Mar 32, 2014 2014/25/23 |
NaN | ||
2014-02-30 |
1393718400000(2014 年 3 月 2 日) | NaN | ||
02/30/2014 |
1393718400000 | |||
月份名稱後的多餘字元 | 04 Dec 1995 04 Decem 1995 04 December 1995 |
818031600000 | ||
04 DecFoo 1995 |
818031600000 只讀取前三個字元。 Firefox ≤121 會讀取到有效的月份名稱為止,因此當它看到「F」時會回傳 NaN。 |
|||
04 De 1995 |
NaN |
規範
Specification |
---|
ECMAScript® 2026 Language Specification # sec-date.parse |