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

如何在jsGrid中正确排序带AM/PM的12小时制时间列?

jsGrid带AM/PM的12小时制时间列排序错误的问题分析与修复

核心问题分析

你的jsGrid时间列排序失效,本质是排序逻辑没有正确解析带AM/PM的12小时制时间字符串,具体配置问题如下:

  • sorttype配置未适配AM/PM格式:你设置了sorttype: "date",但jsGrid默认的date类型排序仅能识别标准日期格式(如YYYY-MM-DD或HH:mm:ss),无法自动解析带AM/PM的12小时制时间字符串。此时排序会退化为字符串字典序比较,比如"10:00 AM"会因为字符串开头的"10"比"02:00 PM"的"02"大,被排在前面,这就是截图里的错误排序结果。
  • 缺失日期格式解析配置:你注释掉了datefmt: "m/d/Y h:i A",这个配置是告诉jsGrid如何解析字段的时间字符串格式。没有它,jsGrid无法将"hh:mm AM/PM"格式的字符串转换为可用于排序的日期对象。
  • 自定义字段customTime的排序逻辑未适配:如果customTime是你自定义的字段类型,默认的sorttype: "date"可能不会生效,因为自定义字段需要明确实现排序比较逻辑,否则会使用默认的字符串排序。

修复方案

针对上述问题,给出两种可行的修复方式:

方式一:利用jsGrid内置date字段的解析能力

恢复并配置正确的datefmt,让jsGrid自动解析AM/PM时间:

{
    name: "TimeStart", title: "Start", type: "customTime", width: "100px", validate: "required",
    sorttype: "date",
    datefmt: "h:i A", // 关键:指定12小时制带AM/PM的格式
    formatter : {     
        date : {       
            AmPm : ["am","pm","AM","PM"],       
        }     
    },
    // 其他配置保留...
}

注意:如果你的customTime字段继承自jsGrid的date字段,这个配置才能生效;如果是完全自定义的字段,需要确保它能读取datefmt并正确解析时间。

方式二:自定义排序比较函数(更可靠)

直接通过sorttype定义自定义函数,将时间字符串转换为时间戳进行比较,彻底避免格式解析问题:

{
    name: "TimeStart", title: "Start", type: "customTime", width: "100px", validate: "required",
    // 替换sorttype为自定义函数
    sorttype: function(item) {
        // 拼接固定日期,确保仅比较时间部分(如果你的数据包含日期,直接用item.StartDate拼接)
        const fullTimeStr = `2000-01-01 ${item.TimeStart}`;
        // 解析为Date对象并返回时间戳,用于排序比较
        return new Date(fullTimeStr).getTime();
    },
    formatter : {     
        date : {       
            AmPm : ["am","pm","AM","PM"],       
        }     
    },
    // 其他配置保留...
}

这种方式不依赖自定义字段的继承逻辑,直接基于时间戳排序,结果绝对准确。

额外注意

你在itemTemplate里添加了隐藏的Date.parse(item.StartDate),但jsGrid的排序是基于原始数据的字段值(即item.TimeStart),不是模板渲染后的DOM内容,所以这个隐藏值对排序没有帮助,可以去掉。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 19:40:57