Date.parse()

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

Date.parse() 靜態方法會解析日期的字串表示形式,並返回該日期的 時間戳

試一試

// Standard date-time string format
const unixTimeZero = Date.parse("1970-01-01T00:00:00Z");
// Non-standard format resembling toUTCString()
const javaScriptRelease = Date.parse("04 Dec 1995 00:12:00 GMT");

console.log(unixTimeZero);
// Expected output: 0

console.log(javaScriptRelease);
// Expected output: 818035920000

語法

js
Date.parse(dateString)

引數

dateString

一個 日期時間字串格式 的字串。有關使用不同格式的注意事項,請參閱連結的參考文件。

返回值

一個表示給定日期的 時間戳 的數字。如果 dateString 解析為有效日期失敗,則返回 NaN

描述

此函式對於根據字串值設定日期值非常有用,例如與 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 時區。

js
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。

js
Date.parse("2019-01-01T00:00:00");

toString() 和 toUTCString() 格式

除了標準的日期時間字串格式外,還支援 toString()toUTCString() 格式。

js
// toString() format
Date.parse("Thu Jan 01 1970 00:00:00 GMT-0500 (Eastern Standard Time)");
// 18000000 in all implementations in all timezones

// toUTCString() format
Date.parse("Thu, 01 Jan 1970 00:00:00 GMT");
// 0 in all implementations in all timezones

非標準日期字串

注意:本節包含特定於實現的行為,這些行為可能在不同瀏覽器或瀏覽器不同版本之間不一致。它無意成為一個全面的瀏覽器相容性表格,在使用任何格式的 Your code 之前,您應該始終進行自己的測試。

當日期字串為非標準時,實現通常會預設使用本地時區。為了保持一致性,我們將假定執行時使用 UTC 時區,並且除非另有說明,否則輸出將隨裝置的時區而變化。本地時區的夏令時(DST)也會對此產生影響

以下是一些非標準日期字串的更多示例。瀏覽器在解析日期字串時非常寬鬆,可能會忽略字串中無法解析的任何部分。出於相容性原因,瀏覽器經常互相複製行為,因此這些處理模式傾向於跨瀏覽器傳播。如前所述,以下示例僅用於說明,遠非詳盡無遺。

描述 示例 Chrome Firefox Safari
單個數字 0(一位數) 946684800000 (2000年1月1日);Firefox ≤122 中為 NaN -62167219200000 (公元0年1月1日)
31(兩位數) NaN -61188912000000 (公元31年1月1日)
999(三位數/四位數) -30641733102000 (公元999年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
第一個日期元件是 2 位數 01-02-03 (第一個段可以是有效的月份) 1041465600000 (2003年1月2日) -62132745600000 (公元1年2月3日)
注意:Safari 總是假定 YY-MM-DD,但 MM/DD/YY。
27-02-03 (第一個段可以是有效的日期,但不能是月份) NaN -61312291200000 (公元27年2月3日)
49-02-03 (第一個段不能是有效的日期且小於 50) 2495923200000 (公元2049年2月3日) -60617980800000 (公元49年2月3日)
50-02-03 (第一個段不能是有效的日期且大於等於 50) -628300800000 (1950年2月3日) -60586444800000 (公元50年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

規範

規範
ECMAScript® 2026 語言規範
# sec-date.parse

瀏覽器相容性

另見