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

DataTables momentjs排序插件无法正确排序AM/PM格式时间求助

解决DataTables + Moment.js日期排序忽略AM/PM的问题

看起来你遇到的是DataTables列类型配置和Moment插件冲突的问题,不是插件本身的bug,调整一下代码配置就能解决。

问题原因分析

你已经正确注册了带AM/PM的日期格式MM/DD/YYYY hh:mm:ss A,但在columnDefs里手动给日期列设置了"type": "date"——这会覆盖Moment插件的自动处理逻辑,让DataTables使用原生的日期排序规则。而原生规则无法识别AM/PM标识,会把时间当成24小时制解析,所以才会出现7:00 AM排在6:30 PM之后的错误(原生解析会把7当成7点,6当成6点,7比6大,自然排后面)。

解决方案

  • 移除columnDefs中的"type": "date"配置,让Moment插件自动接管该列的排序逻辑
  • 确保日期列的文本格式和你注册的MM/DD/YYYY hh:mm:ss A完全匹配(比如AM/PM是大写,没有多余空格)
  • 确认hfDateColumnNum的值是正确的列索引(DataTables列索引从0开始)

修正后的代码示例

$(document).ready(function () {
    // 注册可排序的日期格式
    $.fn.dataTable.moment('MM/DD/YYYY hh:mm:ss A'); 

    $('#<%=gvNotes.ClientID%>').dataTable({
        "order": [[1, 'desc']],
        "columnDefs": [
            { "orderable": false, "targets": 0 }, // 禁用“编辑”列的排序
            // 移除type: "date"配置,让Moment插件自动处理日期列排序
            { "targets": $('#<%=hfDateColumnNum.ClientID%>').val() }
        ]
    });
});

补充说明

当你调用$.fn.dataTable.moment()注册日期格式后,DataTables会自动检测所有列中符合该格式的单元格,将它们的排序类型设置为对应的moment格式,这样排序时就会正确识别AM/PM,按照实际时间顺序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:52:29