使用JavaScript来解析时间

Dod*_*nas 9 javascript time date

这可能很容易,但我有点困惑如何做到这一点.我如何使用JavaScript仅解析以下ISO 8601日期字符串中的时间:

 2009-12-06T17:10:00
Run Code Online (Sandbox Code Playgroud)

换句话说,使用上面的字符串,我想输出:

5:10 PM
Run Code Online (Sandbox Code Playgroud)

任何关于此的指导/教程都会很棒.

Mak*_*nko 11

Chrome和Firefox:标准JavaScript日期构造函数采用ISO 8601日期字符串.例如:

var sampleDate = new Date("2010-03-07T02:13:46Z");

返回此Date对象:"2010年3月7日13:13:46 GMT + 1100(AUS东部夏令时间)"

这在IE中不起作用(包括最新的IE 9)

以下是Paul Sowden在http://delete.me.uk/2005/03/iso8601.html上的跨浏览器解决方案:

Date.prototype.setISO8601 = function (string) {
    var regexp = "([0-9]{4})(-([0-9]{2})(-([0-9]{2})" +
        "(T([0-9]{2}):([0-9]{2})(:([0-9]{2})(\.([0-9]+))?)?" +
        "(Z|(([-+])([0-9]{2}):([0-9]{2})))?)?)?)?";
    var d = string.match(new RegExp(regexp));

    var offset = 0;
    var date = new Date(d[1], 0, 1);

    if (d[3]) { date.setMonth(d[3] - 1); }
    if (d[5]) { date.setDate(d[5]); }
    if (d[7]) { date.setHours(d[7]); }
    if (d[8]) { date.setMinutes(d[8]); }
    if (d[10]) { date.setSeconds(d[10]); }
    if (d[12]) { date.setMilliseconds(Number("0." + d[12]) * 1000); }
    if (d[14]) {
        offset = (Number(d[16]) * 60) + Number(d[17]);
        offset *= ((d[15] == '-') ? 1 : -1);
    }

    offset -= date.getTimezoneOffset();
    time = (Number(date) + (offset * 60 * 1000));
    this.setTime(Number(time));
}
Run Code Online (Sandbox Code Playgroud)

用法:

var date = new Date();
date.setISO8601("2005-03-26T19:51:34Z");
Run Code Online (Sandbox Code Playgroud)

如果你在JavaScript中做了很多日期时间操作,我也可以建议检查一些像MomentJS这样的JS库.它处理一些常见的事情,如日期解析,格式化和计算两个日期之间的差异,并支持多个本地化.


me_*_*and 0

string.slice(11,16)将返回17:10。从那里(可能slice以更有趣和令人兴奋的方式使用)将其转换为 24 小时格式应该相当简单。