DataTable按dd/MM/yyyy格式排序异常求助
问题解决:DataTables日期列按字符串排序而非日期排序
问题根源
页面渲染的是dd/MM/yyyy格式的日期字符串,DataTables默认按字符串字典序排序,而非实际日期逻辑。虽然指定了datetime-moment类型,但未正确配置解析规则,导致插件无法识别显示的日期格式。
解决方案1:配置Moment.js解析规则
确保已引入moment.js和DataTables的dataTables.moment.js插件,在DataTables初始化前注册对应的日期解析格式:
// 注册DD/MM/YYYY格式的日期解析规则 $.fn.dataTable.moment('DD/MM/YYYY'); $(function () { $('.tum-cihaz-listesi').DataTable({ initComplete: function () { var api = this.api(); var footers = $('tfoot th'); for (i = 0; i < footers.length; i++) { api.order.listener(footers[i], i); } }, responsive: true, pageLength: 50, paging: true, ordering: true, info: true, dom: '<"top"lfB>rt<"bottom"ip>', buttons: [ 'copy', 'csv', 'excel', 'print', { extend: 'pdfHtml5', text: 'Portrait PDF', exportOptions: { columns: ':visible', orthogonal: 'print' } }, { extend: 'pdfHtml5', text: 'Landscape PDF', orientation: 'landscape', exportOptions: { columns: ':visible', orthogonal: 'print' } } ], columnDefs: [ { type: 'datetime-moment', targets: [6, 7, 8] } ] }); });
解决方案2:使用data-order属性指定排序用原始日期
修改MVC视图代码,给每个日期列的<td>添加data-order属性,传入数据库原始的yyyy-MM-dd格式日期作为排序依据,页面仍显示dd/MM/yyyy格式:
<td data-order="@(item.INVENTORY_DETAILs.InstallDate.HasValue ? item.INVENTORY_DETAILs.InstallDate.Value.ToString("yyyy-MM-dd") : "")"> @if (item.INVENTORY_DETAILs.InstallDate.HasValue) {@item.INVENTORY_DETAILs.InstallDate.Value.ToString("dd/MM/yyyy")} </td> <td data-order="@(item.INVENTORY_DETAILs.CalibrationCareDate.HasValue ? item.INVENTORY_DETAILs.CalibrationCareDate.Value.ToString("yyyy-MM-dd") : "")"> @if (item.INVENTORY_DETAILs.CalibrationCareDate.HasValue) {@item.INVENTORY_DETAILs.CalibrationCareDate.Value.ToString("dd/MM/yyyy")} </td> <td data-order="@(item.INVENTORY_DETAILs.CalibrationValidateDate.HasValue ? item.INVENTORY_DETAILs.CalibrationValidateDate.Value.ToString("yyyy-MM-dd") : "")"> @if (item.INVENTORY_DETAILs.CalibrationValidateDate.HasValue) {@item.INVENTORY_DETAILs.CalibrationValidateDate.Value.ToString("dd/MM/yyyy")} </td>
此时可移除DataTables配置中columnDefs里的datetime-moment设置,DataTables会自动使用data-order的值进行正确排序。
注意事项
- 方案1依赖Moment.js及对应DataTables插件,需确保资源引入正确;
- 方案2无需额外依赖,直接通过HTML属性传递排序值,兼容性更稳定。
内容的提问来源于stack exchange,提问作者zaferbayar
相关产品推荐
相关产品推荐

