试一试
// 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
语法
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() 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:00Thu Jan 01 1970Jan 01 1970 00:00:00Jan 01 1970 |
0 | ||
看起来像 toUTCString() 的字符串 |
Thu, 01 Jan 1970 00:00:00Thu, 01 Jan 197001 Jan 1970 00:00:0001 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-23Mar 32, 20142014/25/23 |
NaN | ||
2014-02-30 |
1393718400000 (2014年3月2日) | NaN | ||
02/30/2014 |
1393718400000 | |||
| 月份名称后的多余字符 | 04 Dec 199504 Decem 199504 December 1995 |
818031600000 | ||
04 DecFoo 1995 |
818031600000 只读取前三个字符。 Firefox ≤121 会读取到有效的月份名称,因此在看到 "F" 时返回 NaN。 |
|||
04 De 1995 |
NaN | |||
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-date.parse |
浏览器兼容性
加载中…