Datepicker在IE和Chrome中给出不同的结果

时间:2018-10-16 05:46:39

标签: javascript jquery asp.net-mvc date datepicker

我有两个Datepicker,根据第一个Datepicker的日期选择,第二个Datepicker应该显示允许用户选择第一个Datepicker所选日期后1年内的日期。我正在使用的代码在Chrome上运行正常,但在IE11中却给出了不同的结果。当我使用警报方法查看日期时,在 Chrome 中,我得到的结果是“ 2018年10月10日星期三00:00:00 GMT + 0530(印度标准时间)”而在 IE 中,结果为“ 1918年10月10日星期三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 :(得分:0)

2位日期转换导致Date.parse()(和Date构造函数)在20世纪产生了问题,这是IE中的一种已知行为(和Edge,请参见this issue)下方:

  

Firefox 49更改了两位数年份的解析,以与   Google Chrome浏览器,而不是Internet Explorer。现在,两位数年份   少于50的解析为21世纪。

对于IE 11和Edge中的解决方法,您可以避免使用momentjs来构造日期字符串,将Date解析为日期,将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")); 构造为解析日期字符串,如下所示: / p>

Date

请注意,您仍然可以创建自己的解析器以进行2到4位数的年份转换,但是拆分日期部分并将它们重新结合到total += valueToAdd * multiplier构造函数中可能会花费更多时间。

相关问题:

Converting (formatting) 2-digit date to a 4-digit date

答案 1 :(得分:0)

Rob实际上帮助我找到了解决方案,因为他在答案中张贴了答案,所以我将其称为单独的答案。我的要求是将日期显示为mm / dd / yy格式,但IE中将2位数字年份视为20世纪,这就是为什么我在IE中将1918年作为日期10/16/18的原因。因此,我按照Rob的建议编写了一个小型解析器方法。

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年的日期。