使用JavaScript解析时间

9

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

 2009-12-06T17:10:00
换句话说,使用上述字符串,我想输出:
5:10 PM
任何关于这方面的指导和教程都将非常有帮助。

1
我不是故意将它关闭为那个问题的副本的。:'( - Ry-
我不同意这是与所示问题完全重复的。解析ISO时间戳是与解析人类输入不同的问题。 - Andrew
4个回答

11

Chrome和Firefox:标准的JavaScript日期构造函数需要ISO 8601日期字符串。例如:

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

返回这个日期对象:"Sun Mar 07 2010 13:13:46 GMT+1100 (AUS Eastern Daylight Time)"

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

使用方法:

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

如果你在JavaScript中进行了大量的日期时间操作,我也建议你检查一些JS库,比如MomentJS。它处理一些常见的事情,比如日期解析、格式化以及计算两个日期之间的差异,并支持多种本地化。


0
这是所谓的ISO 8601格式。Mochikit带有一个用于解析它的函数。

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

您可以像下面这样获取一个日期对象:
  timestamp = isoTimestamp("2009-12-06T17:10:00");

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


0

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


0
解析ISO时间戳很容易,以文化适当的方式格式化时间却很难(例如对于所有语言环境来说,“下午5:10”并不合适)。许多工具包提供了处理ISO部分的例程,它甚至是新的ECMAScript 5标准的一部分;然而只有少数工具包提供了后者的功能。 你可以尝试使用dojo.date.stamp.fromISOStringdojo.date.locale.format。 我相信Date-JS也可以格式化时间。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,