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

Grid.js日期列排序求助:mm/dd/yyyy格式日期被按字符串排序

Grid.js日期列排序与格式化解决方案

Grid.js完全支持针对日期列的自定义格式化和排序配置,能解决mm/dd/yyyy格式日期被识别为字符串导致排序错误的问题,以下是两种常用方案:

方案一:直接基于字符串日期配置排序逻辑

如果你的数据源里日期就是mm/dd/yyyy格式的字符串,无需提前转换,直接在列配置中自定义排序函数,同时保留原有显示格式:

const grid = new Grid({
  columns: [
    // 其他列配置
    {
      name: '日期',
      // 保持原字符串格式显示
      formatter: (cell) => cell,
      // 自定义排序逻辑:将字符串转为Date对象比较
      sort: (a, b) => {
        // 拆分mm/dd/yyyy为月、日、年,注意JavaScript中月份从0开始计数
        const [monthA, dayA, yearA] = a.split('/');
        const [monthB, dayB, yearB] = b.split('/');
        const dateA = new Date(yearA, monthA - 1, dayA);
        const dateB = new Date(yearB, monthB - 1, dayB);
        return dateA - dateB;
      }
    }
  ],
  data: [
    ['10/05/2022'],
    ['01/15/2023'],
    ['06/30/2021']
  ]
});

方案二:提前转换为Date对象(更推荐)

如果可以提前处理数据源,把日期字符串转为Date对象,Grid.js会自动按日期排序,只需配置格式化函数控制显示样式:

// 预处理数据,将日期字符串转为Date对象
const rawData = [
  { id: 1, dateStr: '10/05/2022' },
  { id: 2, dateStr: '01/15/2023' },
  { id: 3, dateStr: '06/30/2021' }
];
const processedData = rawData.map(item => {
  const [month, day, year] = item.dateStr.split('/');
  return {
    ...item,
    date: new Date(year, month - 1, day)
  };
});

// 初始化Grid
const grid = new Grid({
  columns: [
    // 其他列配置
    {
      name: '日期',
      // 将Date对象格式化为mm/dd/yyyy显示
      formatter: (cell) => {
        const month = String(cell.getMonth() + 1).padStart(2, '0');
        const day = String(cell.getDate()).padStart(2, '0');
        const year = cell.getFullYear();
        return `${month}/${day}/${year}`;
      },
      // 无需自定义sort,Grid.js会识别Date类型并自动按日期排序
    }
  ],
  data: processedData
});

核心思路是利用Grid.js列配置中的formatter控制显示格式,sort函数自定义排序规则(或依赖Date类型的自动排序),就能解决字符串日期排序混乱的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 08:27:40