如何修复IE 11中的日期解析

时间:2019-01-29 11:56:56

标签: javascript date internet-explorer

我正在尝试使用Date.Parse函数解析动态创建的日期格式。但是它在运行时在IE中显示“ NaN”,并且在Chrome上可以正常工作。

这是我的示例代码,

       var date = 2019 + '-' + 2 + '-' + 29;
       Date.parse(date)

当我尝试直接使用Date.Parse(2019-2-29)时,它的工作原理。

2 个答案:

答案 0 :(得分:0)

您应该提供格式正确的日期

  

Date.parse()方法解析日期的字符串表示形式,然后   返回自UTC 1970年1月1日00:00:00以来的毫秒数   或NaN(如果字符串无法识别,或者在某些情况下包含   非法的日期值(例如2015-02-31)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/parse

例如'1995年12月4日00:12:00 GMT'

答案 1 :(得分:0)

您不应该在ES5环境中使用Date.parse,因为它可能无法正常工作。但是,下面的示例向您展示了如何解决它(未经彻底测试,您可能需要对其进行调整)。

var date = '2019-02-28T14:05:23';

function isoToMS (iso) {
  var r = null;
  if (Date.parse) {
    r = Date.parse(iso);
  }
  if (!r || !Number.prototype.isPrototypeOf(r)) {
    r = iso.split(/[\-T:]/g).reduce(function (d, partial, i) {
      if (i < 1) { d.setFullYear(Number(partial)); }
      else if (i < 2) { d.setMonth(Number(partial) - 1); }
      else if (i < 3) { d.setDate(Number(partial)); }
      else if (i < 4) { d.setHours(Number(partial)); }
      else if (i < 5) { d.setMinutes(Number(partial)); }
      else if (i < 6) { d.setSeconds(Number(partial)); }
      return d;
    }, new Date());

    if (!/T\d+/g.test(iso)) {
      // note: Date.parse converts ISO without time information to UTC
      r.setMinutes(r.getMinutes() + r.getTimezoneOffset());
    }
  }
  return +r;
}

console.log(isoToMS(date));