IE11日期排序失效求助:Chrome正常但IE11异常
解决IE11中日期排序失效的问题
你的日期排序在Chrome正常但IE11出问题,核心原因是IE11对日期字符串的解析兼容性极差,再加上一处HTML转义的小问题,下面分步给你解决:
核心问题:IE11的Date构造函数兼容性
Chrome等现代浏览器能灵活解析多种日期格式,但IE11只支持非常严格的格式(比如YYYY/MM/DD或标准ISO8601的YYYY-MM-DDTHH:mm:ss)。如果你的hubDueDate是YYYY-MM-DD这种横杠分隔的格式,IE11用new Date()直接解析会返回Invalid Date,导致getTime()得到NaN,排序逻辑完全失效。
解决方案:手动解析日期字符串
不要依赖浏览器的Date构造函数自动解析,而是手动拆分日期组件来创建Date对象。假设你的日期格式是YYYY-MM-DD,可以写一个工具函数:
function parseDate(dateStr) { // 按横杠拆分年、月、日(格式不同的话调整分隔符即可) const [year, month, day] = dateStr.split('-'); // 注意:Date的月份是0-based(0=1月),所以要减1 return new Date(parseInt(year), parseInt(month) - 1, parseInt(day)); }
然后在排序逻辑里替换原来的Date创建代码即可。
次要问题:HTML转义错误
你代码里写的▼会被浏览器解析成▼字符串(因为&会转成&),而不是直接渲染成向下三角符号。IE11对这种二次转义的字符处理容易出问题,应该直接写:
// 升序时设置向下三角 ev.target.innerHTML = '▼'; // 降序时设置向上三角 ev.target.innerHTML = '▲';
完整修改后的代码示例
sort(ev, sortProperty) { // 手动解析日期的工具函数 function parseDate(dateStr) { const [year, month, day] = dateStr.split('-'); return new Date(parseInt(year), parseInt(month) - 1, parseInt(day)); } if (ev.target.innerText === '▲') { // 升序逻辑 ev.target.innerHTML = '▼'; this.summary.sort(function (a, b) { if (sortProperty === 'hubDueDate') { console.log("ascending1"); const valb = parseDate(b[sortProperty]); const vala = parseDate(a[sortProperty]); return valb.getTime() - vala.getTime(); } else { console.log("descending"); return parseFloat(b[sortProperty]) - parseFloat(a[sortProperty]); } }); } else { // 降序逻辑 ev.target.innerHTML = '▲'; this.summary.sort(function (a, b) { if (sortProperty === 'hubDueDate') { console.log("descending1"); const valb = parseDate(b[sortProperty]); const vala = parseDate(a[sortProperty]); return vala.getTime() - valb.getTime(); } else { console.log("descending"); return parseFloat(a[sortProperty]) - parseFloat(b[sortProperty]); } }); } }
额外验证点
- 确认
hubDueDate的格式是固定的,手动解析函数能正确拆分组件 - 在IE11调试时,可以加
console.log(valb, vala),检查是否是有效的Date对象(而非Invalid Date) - 如果日期包含时间部分,记得在解析函数里同步处理时分秒
内容的提问来源于stack exchange,提问作者Anjaneyulu
相关产品推荐
相关产品推荐

