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

使用JavaScript解析时间

  •  9
  • Dodinas  · 技术社区  · 15 年前

    ISO 8601 日期字符串:

     2009-12-06T17:10:00
    

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

    5:10 PM
    

    任何关于这方面的指导/教程都会很好。

    4 回复  |  直到 15 年前
        1
  •  11
  •   Maksym Kozlenko    11 年前

    铬和铬;Firefox:标准JavaScript日期构造函数采用iso8601日期字符串。例如:

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

    返回此日期对象:“Sun Mar 07 2010 13:13:46 GMT+1100(澳大利亚东部夏令时)”

    以下是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));
    }
    

    用法:

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

    如果您在JavaScript中进行了大量的datetime操作,我还建议您检查一些JS库,比如 MomentJS

        2
  •  0
  •   me_and    15 年前

    string.slice(11,16) 会回来的 17:10 . 从那里(可能使用 slice

        3
  •  0
  •   ZZ Coder    15 年前

    这就是所谓的iso8601格式。Mochikit附带了一个函数来解析它,

    http://mochikit.com/doc/html/MochiKit/DateTime.html

    你可以得到这样的约会对象,

      timestamp = isoTimestamp("2009-12-06T17:10:00");
    

    如果不想使用Mochikit,只需复制函数即可。

        4
  •  0
  •   peller    15 年前

    解析ISO时间戳很容易,以文化上合适的方式格式化时间很难(下午5:10不适合所有地区)许多工具箱为ISO部分提供例程,甚至是新的ECMAScript 5标准的一部分;然而,只有一对夫妇会做后一部分。

    dojo.date.stamp.fromISOString dojo.date.locale.format .