You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

额外验证点

  1. 确认hubDueDate的格式是固定的,手动解析函数能正确拆分组件
  2. 在IE11调试时,可以加console.log(valb, vala),检查是否是有效的Date对象(而非Invalid Date)
  3. 如果日期包含时间部分,记得在解析函数里同步处理时分秒

内容的提问来源于stack exchange,提问作者Anjaneyulu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:32:38