手动将yyyy-MM-ddTHH:mm:ss.fffZ转换为JavaScript中的DateTime

Mar*_*tín 9 javascript datetime string-formatting nsdateformatter

我从Webservice收到一个字符串,其格式为以下格式:

yyyy-MM-ddTHH:mm:ss.fffZ
Run Code Online (Sandbox Code Playgroud)

我需要将使用JavaScript的String转换为普通的DateTime但不使用new,Date('yyyy-MM-ddTHH:mm:ss.fffZ')因为我使用的是不支持该转换的旧版JavaScript.我可以拆分该字符串并得到:

  • 年
  • 月
  • 天
  • 时间

但如何操纵时区"fffZ"任何建议?

Jan*_*oom 10

这是John Resig的一个班轮:

var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")),
Run Code Online (Sandbox Code Playgroud)

  • 我认为这个答案需要解释,因为它需要一个例子,它以逗号结尾 (3认同)

Mar*_*tín 5

我已经找到了解决方案.请查看http://webcloud.se/log/JavaScript-and-ISO-8601/

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)