坚持使用JavaScript Date标准格式?

时间:2012-12-08 18:49:56

标签: javascript date

在阅读了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")

1 个答案:

答案 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"确实可以跨浏览器工作,尽管对于最近的版本可能也是如此。