你可以使用" - "而不是" /"使用JavaScript短日期格式

时间:2016-04-09 16:12:50

标签: javascript

在W3Schools上,他们表示用" /"输入短日期格式。如下, new Date("03/25/2015")。我尝试更换" /"用" - "如下, new Date("03-25-2015")这也有效。但是,在阅读网站时,我无法发现被提及是一种有效的替代方案。

是吗?即使它有效,我有什么理由不使用它而使用正斜杠吗?

5 个答案:

答案 0 :(得分:1)

根据the ES5 spec,当Date构造函数传递一个字符串时,它将使用与Date.parse相同的逻辑:

  
      
  1. 设v为ToPrimitive(value)。
  2.   
  3. 如果Type(v)是String,那么      
        

    一个。将v解析为日期,其方式与解析方法完全相同(15.9.4.2);设V为该日期的时间值。

      
  4.   

Date.parse uses the Date Time String Format first,特定于实施的启发式第二:

  

该函数首先尝试根据日期时间字符串格式(15.9.1.15)中调出的规则解析字符串的格式。如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。

Date Time String FormatYYYY-MM-DDTHH:mm:ss.sssZYYYYYYYY-MMYYYY-MM-DD也有效。

正如Mottie所说,new Date("03-25-2015")在Firefox中失败了。然而,这仅部分归因于连字符。如果将年份移到前面(new Date("2015-03-25")),则日期字符串将符合成功的日期时间字符串。

答案 1 :(得分:0)

如果您尝试在Firefox中使用new Date("03-25-2015"),则会收到“无效日期”消息。基本上,使用破折号并不适用于所有浏览器。最好使用正斜杠(/)。

同样适用于日期new Date("03.25.2015")之间的时段在Firefox中无效,但在Chrome中无效。

答案 2 :(得分:0)

来自MDN https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

创建新Date对象的方法之一是new Date(dateString);dateString被描述为:

  

表示日期的字符串值。字符串应采用可识别的格式   Date.parse()方法(符合IETF的RFC 2822时间戳,也是一个   版本ISO8601)。   注意:强烈建议不要使用Date构造函数(和Date.parse,它们是等效的)解析日期字符串   浏览器差异和不一致。

这种创建新Date对象的方法使用Date.parse()方法来解析dateString字符串。

来自https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

Date.parse()已定义:

  

Date.parse()方法解析日期的字符串表示,和   返回自1970年1月1日00:00:00 UTC以来的毫秒数   如果字符串无法识别,或者在某些情况下包含,则为NaN   非法日期值(例如2015-02-31)。

     

ECMAScript 5 ISO-8601格式支持

     

日期时间字符串可以是ISO 8601格式。例如,“2011-10-10”(仅限日期)或   “2011-10-10T14:48:00”(日期和时间)可以传递和解析。哪里   该字符串仅为ISO 8601日期,UTC时区用于   解释参数。如果字符串是ISO 8601中的日期和时间   格式,它将被视为本地。

因此,您使用的语法(即new Date("03-25-2015"))是有效的语法,但由于浏览器差异和不一致而不鼓励。

答案 3 :(得分:0)

如果您有这样的问题,通常应该直接查看规范来源。在这种情况下,JavaScript的规范源是EMCAScript规范。

相关部分是:

http://www.ecma-international.org/ecma-262/6.0/#sec-date.parse

它声明:

  

Date.parse(string)

     

[...]

     

该函数首先尝试根据日期时间字符串格式(20.3.1.16)中调出的规则(包括延长年份)来解析字符串的格式。如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。

换句话说,Date Time String Format (20.3.1.16)中列出了所有实现都支持的唯一格式。除此之外的任何格式可能会或可能不会根据实施情况而有效,因此不应使用。

为简化第20.3.1.16节,日期的唯一有效格式为YYYY-MM-DD。毫不奇怪,W3Schools在他们的例子中使用了无效的格式。

JavaScript文档的另一个来源是Mozilla Developer Network(MDN)。它不是规范来源,但质量远远高于W3Schools,并且包含了文章底部规范来源的直接链接。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date

答案 4 :(得分:-1)

没有人使用m-d-y,这不是一种有效的格式,不管浏览器都不应该使用。

如果您想使用MDY,请使用斜杠:

new Date('03/25/2015');

如果您想使用破折号,请使用DMY:

new Date('25-03-2015');

不相信?这个日期是什么日期:03-04-2015 3月4日? 4月3日?