我有两个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中按预期方式工作,我们有解决方法吗?预先感谢
答案 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
构造函数中可能会花费更多时间。
相关问题:
答案 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年的日期。