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

如何让React-Table搜索栏正确过滤2022-08-13这类格式的日期?

实现简洁日期格式搜索的解决方案

当然可以实现2022-07-12这类简洁日期格式的搜索,问题核心在于React-Table默认的全局过滤是纯字符串匹配,如果你的ReportDate字段存储/返回的是带时分秒的格式(比如2022-07-12 14:30:00或2022-07-12T14:30:00),直接搜索2022-07-12就会因为字符串不匹配而无结果。

你只需要自定义过滤逻辑,针对日期格式做特殊处理即可,以下是两种可行方案:

方案一:全局自定义过滤函数

修改React-Table的全局过滤逻辑,当检测到输入是YYYY-MM-DD格式时,自动提取表格数据中ReportDate的日期部分进行匹配:

// 自定义全局过滤函数
const filterGlobal = (rows, filterValue) => {
  // 匹配YYYY-MM-DD格式的正则
  const datePattern = /^\d{4}-\d{2}-\d{2}$/;
  // 如果输入是标准日期格式
  if (datePattern.test(filterValue)) {
    return rows.filter(row => {
      // 提取ReportDate的日期部分(去掉时分秒)
      const rawDate = row.values.ReportDate;
      const pureDate = rawDate.split('T')[0] || rawDate.split(' ')[0];
      return pureDate === filterValue;
    });
  }
  // 非日期格式时,保留原有的全局模糊匹配逻辑
  return rows.filter(row => {
    return Object.values(row.values).some(value =>
      String(value).toLowerCase().includes(filterValue.toLowerCase())
    );
  });
};

// 在useTable中传入自定义过滤函数
const tableInstance = useTable(
  {
    columns,
    data,
    filterGlobal, // 启用自定义全局过滤
  },
  useGlobalFilter
);

方案二:针对ReportDate字段单独设置过滤逻辑

如果你只需要针对ReportDate字段适配日期搜索,可以在列定义中单独配置过滤函数:

const columns = [
  // 其他列配置...
  {
    Header: '报告日期',
    accessor: 'ReportDate',
    // 自定义该列的过滤逻辑
    filterFn: (rows, id, filterValue) => {
      const datePattern = /^\d{4}-\d{2}-\d{2}$/;
      if (datePattern.test(filterValue)) {
        return rows.filter(row => {
          const rawDate = row.values[id];
          const pureDate = rawDate.split('T')[0] || rawDate.split(' ')[0];
          return pureDate === filterValue;
        });
      }
      // 非日期输入时,保留原有的包含匹配
      return rows.filter(row =>
        String(row.values[id]).toLowerCase().includes(filterValue.toLowerCase())
      );
    },
  },
];

注意:你提供的GlobalFilter组件仅负责输入框的UI和传递过滤值,不需要修改这个组件,只需要调整React-Table的过滤逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 13:57:34