Невозможно создать объект даты, который работает в IE - PullRequest
1 голос
/ 29 марта 2019

Ну, у меня есть этот код:

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;
}

В chrome результат от 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

Так что ... вероятно new Date() не работает правильно в IE, есть идеи?

1 Ответ

1 голос
/ 29 марта 2019

Парсинг строк даты с помощью конструктора Date настоятельно не рекомендуется из-за различий в реализации в разных браузерах (это именно то, что вы испытали). Если вы можете рассчитывать на определенный формат, такой как пример в вашем вопросе, то относительно легко разобрать строку даты самостоятельно, а затем передать части даты конструктору. Например (есть более элегантные способы сделать это, но попытался избежать любого синтаксиса ES6 ниже, так как вы используете это в IE):

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...