【问题标题】:How can I sort my DataTables row by date?如何按日期对 DataTables 行进行排序?
【发布时间】: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>

【问题讨论】:

标签: php jquery sorting datetime datatables


【解决方案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 上的源链接。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 2015-12-04
      相关资源
      最近更新 更多