为什么我不能从包含毫秒的字符串创建日期?

Koo*_*Inc 1 javascript datetime

在javascript中,您可以从字符串创建Date对象,例如

var mydate = new Date('2008/05/10 12:08:20');
console.log(mydate); //=> Sat May 10 2008 12:08:20 GMT+0200
Run Code Online (Sandbox Code Playgroud)

现在在字符串中使用毫秒来尝试这个

var mydate = new Date('2008/05/10 12:08:20:551'); // or '2008/05/10 12:08:20.551'
console.log(mydate); //=> NaN
Run Code Online (Sandbox Code Playgroud)

只是出于好奇:这是为什么?

编辑:感谢您的回答,这些都提供了充分的解释.也许在将来某个日期字符串中会支持使用毫秒.直到然后我把它煮熟了,这可能对某人有用:

function dateFromStringWithMilliSeconds(datestr){
    var dat = datestr.split(' ')
        ,timepart = dat[1].split(/:|\./)
        ,datestr = dat[0]+' '+timepart.slice(0,3).join(':')
        ,ms = timepart[timepart.length-1] || 0
        ,date;
    date = new Date(datestr);
    date.setMilliseconds(ms);
    return date;
}
Run Code Online (Sandbox Code Playgroud)

Ode*_*ded 5

如果您知道不同的组件,则可以将此重载用于Date构造函数:

var mydate = new Date(2008,6,10,12,8,20,551);
Run Code Online (Sandbox Code Playgroud)

月份注6,月份从0-11开始.

如果需要,您可以获取字符串表示并将其拆分为其组成部分,并将它们传递给此构造函数:

var datestring = '2008/05/10 12:08:20:551';
var datearray = datestring.split(/\s|:|\//g)
var mydate = new Date(datearray[0], parseInt(datearray[1]) + 1 , datearray[2], datearray[3],datearray[4],datearray[5],datearray[6]);
Run Code Online (Sandbox Code Playgroud)

文档所述,字符串重载应符合RFC-1123(后者又符合RFC-822),不支持毫秒.