javascript - 使用 JavaScript 解析时间

标签 javascript date time

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

 2009-12-06T17:10:00

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

5:10 PM

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

最佳答案

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

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

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

这在 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 .它处理一些常见的事情,例如日期解析、格式化和计算两个日期之间的差异,并支持多种本地化。

关于javascript - 使用 JavaScript 解析时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1856199/

相关文章:

javascript - 用 1 行代码在 Javascript 中显示实时日期 + 时间

c# - 将文本格式化为日期/时间格式 c#

javascript - Bootstrap Datepicker(避免文本输入或限制手动输入)

javascript - 动态 CasperJS 循环在随机迭代时终止

r - 05 :00:00 - 28:59:59 time format

javascript - 使用 Parse.com 日期

java - SimpleDateFormat 不会解析!

java - ZonedDateTime 返回某个日期到另一个结束日期的错误月数

javascript - 查找并替换 'src' 属性的部分文件路径

javascript - 从 DropDownList 中选择选项时激活函数