代码之家  ›  专栏  ›  技术社区  ›  KooiInc

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

  •  1
  • KooiInc  · 技术社区  · 16 年前

    在javascript中,可以从字符串创建日期对象,如

    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 回复  |  直到 16 年前
        1
  •  4
  •   James    16 年前

    dateString

    表示日期的字符串值。字符串的格式应该由parse方法识别( IETF-compliant RFC 1123 timestamps

    这种格式似乎不能容纳毫秒的日期。。。最好是在没有ms的情况下定义日期,然后打电话 setMilliseconds() 之后。

        2
  •  5
  •   Oded    16 年前

    如果您知道不同的组件,您可以使用此重载 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 )它不支持毫秒。

        3
  •  1
  •   Mihai    16 年前

    ECMA-262 标准第15.9.1.15节确实在日期字符串格式中指定了毫秒。我猜浏览器开发者就是懒得去实现它。