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

时间:2010-04-10 12:07:52

标签: 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

现在在字符串

中使用毫秒来尝试
var mydate = new Date('2008/05/10 12:08:20:551'); // or '2008/05/10 12:08:20.551'
console.log(mydate); //=> NaN

出于好奇:这是为什么?

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

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;
}

3 个答案:

答案 0 :(得分:5)

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

var mydate = new Date(2008,6,10,12,8,20,551);

月份注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]);

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

答案 1 :(得分:4)

  

<强> dateString

     
    

表示日期的字符串值。该字符串应采用解析方法(IETF-compliant RFC 1123 timestamps)识别的格式。

  

此格式似乎不包含日期中的毫秒数...最好只定义没有ms的日期,然后再调用setMilliseconds()

答案 2 :(得分:1)

ECMA-262标准,第15.9.1.15节确实指定了日期字符串格式的毫秒数。我猜测浏览器开发人员无法实现它。