数据表中的日期排序

问题描述 投票:0回答:10

我正在尝试对数据表中的日期进行排序,例如

DD/MM/YYYY
(日、月、年)。 我正在关注 https://datatables.net/plug-ins/sorting/

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

我似乎无法让日期时间插件进行排序。我尝试了老方法,用日期。初始化看起来像这样:

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

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

当我将

ordering:true
2016 年日期中的 2 个出现在列表中的其他位置时(因此,不是按照您期望的顺序)

一切都指向时刻,我想我需要对此进行排序。但我不知道如何。

我在某处看到

$.fn.dataTable.moment('DD.MM.YYYY');
,但我知道
fn
不再适用于这个最新版本的数据表?

有人知道如何对日期进行排序吗?

datatables momentjs
10个回答
23
投票

使用

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
});

7
投票

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 函数。最后,添加“顺序”以应用您想要的排序。


3
投票

请查看此answer,了解按日期对数据进行排序的替代方法。

示例代码::

<td data-search="21st November 2016 21/11/2016" data-order="1479686400">
    21st November 2016
</td>

$('#dataTable').DataTable({
    "order": [[10, 'desc']],
});

谢谢你,

快乐编码:)


2
投票

对于我来说,使用 ASP.NET core 3.1 和 MVC,我在数据表的 上使用了数据排序属性:

                    <td data-sort="@(item.DueDateTime.Ticks)">
                        @Html.DisplayFor(modelItem => item.DueDateTime)
                    </td>

无需插件

请参阅此链接: https://datatables.net/examples/advanced_init/html5-data-attributes.html


1
投票

请参考这支笔: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" ]] 
    }); 

1
投票

以下 Plasebo 的 示例有效,但在我的例子中,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" 但按月份值排序。


1
投票

您可以使用自己的比较器来控制日期的排序方式。

 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"
            }]

1
投票

我过去使用过一个丑陋的 hack,特别是当我无法快速修改 DataTable javascript 时。您可以添加一个隐藏的范围,其中的日期采用可排序的格式。

<td><span style="visibility:hidden">2006-12-21</span>21/12/2006</td>

0
投票

测试 强文字

$.fn.dataTableExt.oSort['time-date-sort-pre'] = function(value) {      
    return Date.parse(value);
};
$.fn.dataTableExt.oSort['time-date-sort-asc'] = function(a,b) {      
    return a-b;
};
$.fn.dataTableExt.oSort['time-date-sort-desc'] = function(a,b) {
    return b-a;
};

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


0
投票

事实证明,这比需要的要复杂得多。我尝试了 moment、luxon 以及上面的所有答案,但没有一个适合我的日期(DD/MM/YYYY)格式。

事实证明,这就像将我的日期转换为 iso8601 格式并将其插入到数据顺序属性中一样简单。不需要其他库。

< td data-order="1479686400">
30/01/2024
 </td>

我正在使用 Asp.net Core,但这应该可以工作,无论您的框架如何。

© www.soinside.com 2019 - 2024. All rights reserved.