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
相关产品推荐
相关产品推荐

