如何按日期对 DataTables 行进行排序?

Posted

技术标签:

【中文标题】如何按日期对 DataTables 行进行排序?【英文标题】:How can I sort my DataTables row by date? 【发布时间】:2018-03-30 05:08:54 【问题描述】:

我想按日期排序我的专栏: P>

var table = $('#table').DataTable(
   "order": [[0, "desc"]],
);

但这里是我的结果: P>

29.06.17
27.06.17
26.06.17
22.08.17
18.10.17
15.09.17

什么我希望是这样的: P>

18.10.17
15.09.17
22.08.17    
29.06.17
27.06.17
26.06.17

六月,八月,然后,再九月和十月,然后...... P>

我还测试:

"columnDefs": [
    "type": "date-dd.mm.yy", targets: 0 
],

但是,这并没有改变任何东西。 P>

【问题讨论】:

我想你必须用dateobjects使其排序工作。见:w3schools.com/jsref/jsref_obj_date.asp 什么语言是什么?跨度> 【参考方案1】:

dataTables date 类型使用 Data.parse(),它只支持一组有限的日期格式。欧洲风格的 dd.mm.yy 不可解析,因此日期是 alpha 排序的。

您可以处理data attributes,即在每列中添加data-sort="10/18/17",但我认为创建一个返回有效日期的小插件更容易:

$.extend( $.fn.dataTableExt.oSort, 
  "jarla-date-pre": function(a) 
     a = a.split('.');
     return new Date(a[1]+'/'+a[0]+'/'+a[2])
   
);

像这样使用它:

columnDefs: [
   type: 'jarla-date', targets: 0    
]

演示 -> http://jsfiddle.net/vad94dcs/

【讨论】:

【参考方案2】:

您需要使用render 函数,该函数允许您格式化日期以进行显示和使用原始日期值进行排序。

以下代码使用moment.js javascript 库来格式化日期。


     data: 'DateField',
     render: function (data, type, row) 
     // If display or filter data is requested, format the date
     if (type === 'display' || type === 'filter') 

                    return (moment(data).format("ddd DD/MM/YYYY (HH:mm)"));
                
    // Otherwise the data type requested (`type`) is type detection or
    // sorting data, for which we want to use the raw date value, so just return
    // that, unaltered
                return data;
            
        ,

datatables forum, here 上的源链接。

【讨论】:

以上是关于如何按日期对 DataTables 行进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

DataTables:按纪元时间排序

DataTables 时刻按自定义格式排序

如何在 MongoDB 中按日期对集合进行排序?

如何按日期降序对数据表进行排序

jQuery DataTables - 按隐藏列排序日期

DataTables+Datepicker 按日期范围过滤表格