Javascript 如何让Internet Explorer解析;2010-06-09T15:20:00Z“;作为约会?

Javascript 如何让Internet Explorer解析;2010-06-09T15:20:00Z“;作为约会?,javascript,datetime,date,time,utc,Javascript,Datetime,Date,Time,Utc,我正在使用JavaScript处理联合UTC格式的日期(例如“2010-06-09T15:20:00Z”)。IE未给出预期结果(震惊)。以下是NaN var d = new Date("2010-06-09T15:20:00Z"); // NaN 然而,微软在这一页上的文档说,这应该是可行的(就像它在FF中所做的那样)。我甚至从这个页面上复制了JScript代码,但它无法运行,这与我在工作中发现的错误相同。(有点让你怀疑微软是在发布前测试它,还是IE因补丁而损坏) 我可以通过删除“T”并将

我正在使用JavaScript处理联合UTC格式的日期(例如“2010-06-09T15:20:00Z”)。IE未给出预期结果(震惊)。以下是NaN

var d = new Date("2010-06-09T15:20:00Z");  // NaN
然而,微软在这一页上的文档说,这应该是可行的(就像它在FF中所做的那样)。我甚至从这个页面上复制了JScript代码,但它无法运行,这与我在工作中发现的错误相同。(有点让你怀疑微软是在发布前测试它,还是IE因补丁而损坏)

我可以通过删除“T”并将破折号切换为斜杠,让IE解析类似的字符串。问题是我失去了时间的偏移逻辑


关于如何在IE中解决这个问题的任何建议。我已经在IE6和IE7(兼容模式)中对此进行了测试。我没有其他Windows系统可供检查。

对于我喜欢使用的无麻烦的日期操作,它对日期有很多好处,使用它的主要成本是26kb的文件大小


它将解析
“2010-06-09T15:20:00Z”

一想到扩展Javascript核心对象,我就畏缩不前,因此我倾向于使用它们。保罗·索登的全部功劳

    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 time;
    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));
    date.setTime(Number(time));

在您链接的页面中:“注意:ISO日期格式在InternetExplorer9标准模式中是新的。”至于解决方法,请参阅,我根本不会使用它来获取日期对象。如果你想要NLP糖,我推荐A+:)
    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 time;
    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));
    date.setTime(Number(time));