Datepicker дает разные результаты в IE и Chrome - PullRequest
0 голосов
/ 16 октября 2018

У меня есть два средства выбора даты, и на основе выбора даты первого средства выбора даты второе средство выбора даты должно показывать, что пользователь может выбирать дату в течение 1 года после даты, выбранной в первом устройстве выбора даты.Код, который я использую, отлично работает для Chrome, но в IE11 он дает другой результат.Когда я использую метод оповещения для просмотра даты, в Chrome я получаю результат " Ср 10 октября 2018 00:00:00 GMT + 0530 (стандартное время Индии) ", тогда как в IE результат: " Ср 10 октября 1918 00:00:00 GMT + 0530 (стандартное время Индии) "

$('.datepicker1').datepicker({
    dateFormat: "mm/dd/y",
    changeMonth: true,
    changeYear: true,
    yearRange: "-10:+10",
    showOn: "both",
    buttonText: "<i class='fa fa-calendar'></i>",
    onSelect: function (date) {


        var selectedDate = new Date(date);
        alert(selectedDate)
        var date = new Date(Date.parse(selectedDate));

        date.setFullYear(date.getFullYear() + 1);

        var newDate = date.toDateString();

        newDate = new Date(Date.parse(newDate));

        $(".datepicker2").datepicker("option", "maxDate", newDate);



    }
});

$('.datepicker2').datepicker({
    dateFormat: "mm/dd/y",
    changeMonth: true,
    changeYear: true,
    showOn: "both",
    buttonText: "<i class='fa fa-calendar'></i>"
});

Ниже используется синтаксис Razor

@Html.EditorFor(m => m.date1, new { htmlAttributes = new { @class = "datepicker1 form-control", placeholder = "00/00/00", @readonly = "readonly" } })

@Html.EditorFor(m => m.date2, new { htmlAttributes = new { @class = "datepicker2 form-control", placeholder = "00/00/00", @readonly = "readonly" } })

Может кто-нибудь помочь мне выяснить, где я ошибся?Похоже, Date.Parse может работать не так, как ожидалось в IE, у нас есть обходной путь?Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Роб фактически помог мне найти решение, так как он опубликовал ответ в комментариях, я упоминаю его как отдельный ответ.Мое требование состояло в том, чтобы показывать дату в формате мм / дд / гг, но двухзначные годы в IE рассматриваются как 20-й век, поэтому я получал 1918 в IE для даты 10/16/18.Поэтому я написал метод маленького парсера, как советовал Роб.

function parseDate(input) {
    var parts = input.split('/');
    // new Date(year, month [, day [, hours[, minutes[, seconds[, ms]]]]])
    return new Date('20' + parts[2], parts[0] - 1, parts[1]);
}

Используйте метод в событии onSelect первого средства выбора даты

onSelect: function (date) {

        var parsedDate = parseDate(date);

        var date = new Date(Date.parse(parsedDate));

        date.setFullYear(date.getFullYear() + 1);

        var newDate = date.toDateString();

        newDate = new Date(Date.parse(newDate));

        $(".datepicker2").datepicker("option", "maxDate", newDate);


    }

Поскольку я имею дело только с текущими датами, мне не нужно беспокоиться о датах, относящихся к 1900-м годам..

0 голосов
/ 16 октября 2018

Преобразование даты из двух цифр, которое приводит к проблеме года 20-го века с Date.parse()Date конструктором), является известным поведением в IE (и Edge, см. эту проблему *)1006 *), как указано ниже:

Firefox 49 изменил синтаксический анализ двухзначных лет, чтобы он соответствовал браузеру Google Chrome вместо Internet Explorer.Теперь двухзначные годы, которые меньше 50, анализируются как годы 21-го века.

Что касается обходного пути в IE 11 и Edge, вы можете избежать использования конструктора Date для разбора строки даты, используя momentjs с указанным преобразованием формата года из двух цифр в год из четырех цифр, как указано ниже:

var date = new Date(moment(selectedDate, "M/D/YY").format("M/D/YYYY"));

newDate = new Date(moment(newDate, "M/D/YY").format("M/D/YYYY"));

Обратите внимание, что вы все равно можете создать свой собственный анализатор для преобразования года из двух в четыре цифры, но может потребоваться больше времени, чтобы разбить компоненты даты и объединить их в конструктор Date.

Связанные проблемы:

Преобразование (форматирование) двухзначной даты в четырехзначную дату

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...