在数据表中排序日期

时间:2016-05-02 14:11:15

标签: datatables momentjs

我试图在我的数据表中对日期进行排序,例如DD/MM/YYYY(日,月,年)。 我关注https://datatables.net/plug-ins/sorting/

但所有日期排序似乎都已弃用,并指向日期时间插件:https://datatables.net/blog/2014-12-18

我似乎无法让datetime插件正常工作以进行排序。我用旧的方式尝试了约会。初始化看起来像这样:

var historiektable = $('#dataTableHistoriek').DataTable({
    "paging" : false,
    "ordering" : true,
    "scrollCollapse" : true,
    "searching" : false,
    "columnDefs" : [{"targets":3, "type":"date"}],
    "bInfo": true
});

如果没有排序,它会显示如下表格结果:

Without sorting, I get this from the backend

当我把ordering:true 2016日期中的2个出现在列表中的其他位置时(所以,不是按照你期望的顺序)

With sorting on date

一切都指向Moment我认为我需要对此进行排序。但我不确定如何。

我在某个地方看到了$.fn.dataTable.moment('DD.MM.YYYY');,但我知道fn不再使用这个最新版本的数据表吗?

任何人都知道如何排序日期?

THX

5 个答案:

答案 0 :(得分:5)

使用date-eu排序插件以DD/MM/YY

格式对日期进行排序

包含以下JS文件//cdn.datatables.net/plug-ins/1.10.11/sorting/date-eu.js并使用以下代码:

var historiektable = $('#dataTableHistoriek').DataTable({
    "paging" : false,
    "ordering" : true,
    "scrollCollapse" : true,
    "searching" : false,
    "columnDefs" : [{"targets":3, "type":"date-eu"}],
    "bInfo": true
});

答案 1 :(得分:1)

Gyrocode.com的示例似乎是最有效的。最近的解决方案说使用Moments.js,但在我的情况下不起作用。 date-eu不推荐使用DataTables,但是它可以正常工作。

如果要使用日期格式dd / MM / yyyy HH:mm 按日期和时间排序,请以相同的方式使用date-euro

var table = $('#example-table').DataTable({
    columnDefs: [{ 'targets': 0, type: 'date-euro' }],
    order: [0, 'desc'],
});

对于初学者,请将JS文件date-euro添加到您的网站。然后在您的代码中添加“ columnDefs”以指示应应用哪一列date-euro:targets =指示包含要排序的日期的列,type =指示要应用到该列的date-euro函数。最后,添加“订单”以应用所需的排序。

答案 2 :(得分:0)

请参阅此笔:https://codepen.io/arnulfolg/pen/MebVgx

它使用//cdnjs.cloudflare.com/ajax/libs/moment.js/2.8.4/moment.min.js和//cdn.datatables.net/plug-ins/1.10.12/sorting/datetime -moment.js用于排序数据表

要默认对表格进行排序,请使用:

$.fn.dataTable.moment('DD/MM/YY');
$('#example').DataTable({ 
       "order": [[ 3, "desc" ]] 
    }); 

答案 3 :(得分:0)

以下Plasebo's示例有效,但在我的情况下,MySQL DATE_FORMAT按月值排序,而不是整个日期。我的解决方案是从我的SQL语句中删除DATE_FORMAT。

$(document).ready(function() {
  $.fn.dataTable.moment('DD/MM/YY');
  $('.happyTable').DataTable({
        "ordering": true,
        "order": [[ 1, "desc" ]],
  });
});

<强> DATE_FORMAT (日期, '%M /%d /%Y')

“2003-12-30 00:00:00” 导致“12/30/2003”,但按月份值排序。

答案 4 :(得分:0)

您可以创建自己的比较器,以控制日期的排序方式。

 jQuery.extend(jQuery.fn.dataTableExt.oSort, {
            "ddMmYyyy-pre": function (a) {
                a = a.split('/');
                if (a.length < 2) return 0;
                return Date.parse(a[0] + '/' + a[1] + '/' + a[2]);
            },
            "ddMmYyyy-asc": function (a, b) {
                return ((a < b) ? -1 : ((a > b) ? 1 : 0));
            },
            "ddMmYyyy-desc": function (a, b) {
                return ((a < b) ? 1 : ((a > b) ? -1 : 0));
            }
        });

如您在上面的比较器中所看到的,您可以根据数据选择如何解析日期。

在列定义中:

  "columnDefs": [
            {
                targets: [4], type: "ddMmYyyy"
            }]