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

React AG Grid 自定义日期时间排序(格式MM/DD/YYYY ##:##AM/PM)

React AG Grid 日期时间排序问题解决方法

你的问题出在AG Grid默认按字符串规则排序,而日期时间字符串的字符顺序和实际时间顺序不匹配(比如"7:00PM"的字符排序会在"8:00AM"之前,但实际时间更晚)。以下是两种解决方法:

方法一:转换为Date对象(推荐)

在渲染表格前,把日期时间字符串转换成JavaScript的Date对象,AG Grid会自动按时间戳排序,确保日期和时间都正确排序。

数据处理代码

// 原始数据
const rawData = [
  { dateTime: "10/31/2022  8:00AM" },
  { dateTime: "12/31/2022  4:59PM" },
  { dateTime: "12/12/2022  3:00PM" },
  { dateTime: "10/31/2022  7:00PM" },
  { dateTime: "10/31/2022  7:00AM" },
];

// 转换为Date对象,保留原始字符串用于显示
const processedData = rawData.map(item => ({
  ...item,
  dateTimeObj: new Date(item.dateTime)
}));

列定义配置

const columnDefs = [
  {
    headerName: "日期时间",
    field: "dateTimeObj", // 按Date对象排序
    sortable: true,
    valueFormatter: params => params.data.dateTime // 显示原始日期时间字符串
  }
];

方法二:自定义排序器

如果无法提前转换数据,可以给列添加comparator函数,手动解析字符串并比较时间戳:

列定义配置

const columnDefs = [
  {
    headerName: "日期时间",
    field: "dateTime",
    sortable: true,
    comparator: (valueA, valueB) => {
      // 解析字符串为Date对象并获取时间戳
      const timeA = new Date(valueA).getTime();
      const timeB = new Date(valueB).getTime();
      // 降序排序返回 timeB - timeA,升序则返回 timeA - timeB
      return timeB - timeA;
    }
  }
];

验证排序结果

应用上述方法后,降序排序的正确结果应为:

12/31/2022 4:59PM
12/12/2022 3:00PM
10/31/2022 7:00PM
10/31/2022 8:00AM
10/31/2022 7:00AM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 14:15:41