在阅读了this question - 其中还提供了文档链接后,我仍然对文档有疑问。
MDN:Date.parse
表示RFC2822或ISO 8601日期的字符串。
好的,RFC2282:
date-time = [ day-of-week "," ] date FWS time [CFWS]
day-of-week = ([FWS] day-name) / obs-day-of-week
day-name = "Mon" / "Tue" / "Wed" / "Thu" /
"Fri" / "Sat" / "Sun"
date = day month year
year = 4*DIGIT / obs-year
month = (FWS month-name FWS) / obs-month
month-name = "Jan" / "Feb" / "Mar" / "Apr" /
"May" / "Jun" / "Jul" / "Aug" /
"Sep" / "Oct" / "Nov" / "Dec"
day = ([FWS] 1*2DIGIT) / obs-day
现在 - ISO8601
Year:
YYYY (eg 1997)
Year and month:
YYYY-MM (eg 1997-07)
Complete date:
YYYY-MM-DD (eg 1997-07-16)
确定。
问题:
MDN提供了一个模式样本(正在运行)"Dec 25, 1995"
,它在2282或ISO中找不到 。
为什么这个样本有效?订单必须为day month year
(根据2282)。
标准中的分隔符为[space]
(在2282年)和[-]
在ISO中。
为什么这个样本有效(跨浏览器)? Date.parse("2011/11/23")
答案 0 :(得分:1)
对于Date.parse
,请查看EcmaScript specification, section 15.9.4.2:
字符串可以解释为本地时间,UTC时间或时间 在某些其他时区,取决于String的内容。该 function 首先尝试解析字符串的格式 Date Time String Format (15.9.1.15)中提出的规则。如果 字符串不符合函数可能回退的格式 任何特定于实现的启发式或特定于实现的日期 格式。无法识别的字符串或包含非法元素的日期 格式为String的值将导致
Date.parse
返回NaN
。
因此,MDN的Mozilla特定文档非常接近。官方的“EcmaScript日期时间字符串格式”是ISO 8601的子集,否则Gecko浏览器会尝试将其解释为RFC 2822甚至其他内容(这可能包括"Dec 25, 1995"
)。我强烈怀疑"2011/11/23"
确实可以跨浏览器工作,尽管对于最近的版本可能也是如此。