代码之家  ›  专栏  ›  技术社区  ›  Mathias Schnell

这个日期时间格式有简单的转换吗?

  •  3
  • Mathias Schnell  · 技术社区  · 16 年前

    我正在使用jquery从json提要检索数据,作为提要的一部分,我将获得“datetime”属性,如“2009-07-01 07:30:09”。我想把这些信息放进一个javascript日期对象中,以便于使用,但我不相信如果我简单地将其插入构造函数,date对象会识别这种格式。有没有一个函数或者一个聪明的技巧可以用来快速地将这种格式分解成日期对象可以识别和使用的格式?

    4 回复  |  直到 16 年前
        1
  •  3
  •   Alex Bagnolini    16 年前

    从该webservice检索的“date”属性不是真的 Date ,因为它不是可识别的日期格式。

    将其作为日期对象处理的最简单方法是用“t”替换空空间:

    var receivedDate = "2009-07-01 07:30:09";
    var serializedDate = new Date(receivedDate.replace(" ", "T"));
    alert(serializedDate);
    

    这不是最正确的,因为它不处理时区,但在大多数情况下会起作用。

        2
  •  3
  •   anshul    16 年前

    this this .

    input = "2009-07-01 07:30:09";
    var res =  input.match(/([\d\-]+) (\d+):(\d+):(\d+)/);
    date = new Date(Date.parse(res[1])); 
    date.setHours(res[2]);
    date.setMinutes(res[3]);
    date.setSeconds(res[4]);
    console.log(date);
    

    编辑:我最初的回答是

    t = new Date(Date.parse("2009-07-01 07:30:09"));
    

    它没有在chrome中抛出任何错误,但仍然错误地解析了日期。这让我很失望。date.parse确实看起来很不稳定,用它解析完整的日期和时间可能不太可靠。

    编辑2: DateJS 似乎是一个很好的解决方案,当一些严重的文本解析到目前为止是需要的,但在25千字节是有点沉重的休闲使用。

        3
  •  0
  •   kennebec    16 年前

    var str=“2009-07-01 07:30:09”;

    这取决于时区, 如果日期字符串减去了月份的1。

    如果是格林尼治时间,07表示七月而不是八月:

    var str=“2009-07-01 07:30:09”;

    var d=new Date(), time;
    str=str.split(/\D0?/);
    str[1]-=1;
    time=str.splice(3);
    d.setUTCFullYear.apply(d,str);
    d.setUTCHours.apply(d,time)
    alert(d)
    

    /*返回值:(日期) 2009年7月1日星期三03:30:09 GMT-0400(东部昼时)或当地同等时间 */

        4
  •  0
  •   bdl    16 年前

    这可能有点麻烦,但是javascript日期对象将采用yyyy、mm、dd、hh、mm、ss的参数列表。解析出日期值并将其传递给日期构造函数,例如。

    var splitDT= '2009-07-01 07:30:09'.split(' '); // ['2009-07-01','07:30:09']
    var d= splitDT[0].split('-');
    var t= splitDT[1].split(':');
    alert( (new Date(d[0],d[1],d[2],t[0],t[1],t[2])) );       
    

    呸。必须改用数组索引值。是啊,真是一团糟。但它起作用了。