无法创建在IE中有效的日期对象

时间:2019-03-29 15:47:09

标签: javascript date

我有以下代码:

maxdate = saved['maxdate'];
var maxdate = new Date(maxdate.split('.').reverse().join(','));
maxdate.setDate(maxdate.getDate() + 60); //add 60 days

console.log(saved['maxdate']);
console.log(maxdate);
console.log(formatDate(maxdate));

和formatDate函数:

function formatDate(date) {
    var monthNames = [
        "01", "02", "03",
        "04", "05", "06", "07",
        "08", "09", "10",
        "11", "12"
    ];

    var day = date.getDate();
    var monthIndex = date.getMonth();
    var year = date.getFullYear();

    return day + '.' + monthNames[monthIndex] + '.' + year;
}

在console.logs中,结果为:

13.05.2019
Fri Jul 12 2019 00:00:00 GMT+0300 (Eastern European Summer Time)
12.07.2019

一切都很好,但是在IE中它会返回我:

13.05.2019
[date] Invalid Date[date] Invalid Date
NaN.undefined.NaN

.. {。{1}}在IE中可能无法正常工作,有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Parsing date strings with the Date constructor is strongly discouraged是由于不同浏览器的实现差异(正是您所经历的)。如果您可以依靠问题中的示例之类的特定格式,则自己解析日期字符串然后将日期部分传递给构造函数是相对容易的。例如((有更优雅的方法可以执行此操作,但是由于您在IE中使用此方法,因此尝试避免使用以下任何ES6语法):

function parseDate(d) {
  var parts = d.split('.');
  return new Date(parts[2], parts[1] - 1, parts[0]);
}

function formatDate(d) {
  var m = d.getMonth() + 1;
  m = m < 10 ? '0' + m : m;
  return d.getDate() + '.' + m + '.' + d.getFullYear();
}

var maxdate = parseDate('13.05.2019');
maxdate.setDate(maxdate.getDate() + 60);

console.log(formatDate(maxdate));
// 12.07.2019