DataTables 出现日期和时间降序的问题

Posted

技术标签:

【中文标题】DataTables 出现日期和时间降序的问题【英文标题】:DataTables issue with descending dates and times out of order 【发布时间】:2019-08-03 06:08:31 【问题描述】:

我已经成功地格式化了从 API 返回的日期,但是它们在 DataTables 中没有被正确排序。这是我的 JS 代码:

function GetActivityLog(nodeId, domainName, computerName) 

$.ajax(
    url: **removed**,
    success: function (json) 
        table = $('#tblActivityLogs').DataTable(
            "order": [[0, "desc"]],
        );
        table.clear();
        table.rows.add(json).draw();
        $('#nodeName').html(computerName);
    
)

$(document).ready(function () 
    $('#tblActivityLogs').DataTable(
        "order": [[0, "desc"]],
        "autoWidth": false,
        columnDefs: [
             targets: 0, class: 'dt-body-nowrap', title: 'Date/Time', data: 'dateTime' , render: function (data)  return moment(data).format('MMMM Do YYYY, h:mm:ss a')  ,
             targets: 1, title: 'Type', data: 'entryType' ,
             targets: 2, title: 'Event ID', data: 'eventId' ,
             targets: 3, class: 'dt-body-wrap', title: 'Message', data: 'message' 
        ]
    );
)

截取几张我看到的照片是最简单的:

如您所见,降序日期在旧日期、最近日期和返回旧日期之间切换。即使在同一天,时间也是一团糟。这是包含未格式化日期的原始数组的剪辑:

GetActivityLog 是通过 onClick 事件调用的,但我的理解是 $(document).ready 代码为数据表奠定了基础元素和格式,因此事件可以在调用时填充表。

注意:数组项的图像是数组中的第一个,但它在表格中显示为图像中的第五个项(3 月 12 日上午 4:39)。

更新

我在使用moment 格式化数据方面取得了更好的成功,如下所示:

return moment(data).format('MMMM DD YYYY, h:mm:ss')

看起来 DataTables 现在可以正确排序一天,但时间仍未排序(当天的最新时间是当天列表中最旧的时间)。

【问题讨论】:

看起来它将日期排序为字符串,这个问题可能对您有帮助***.com/questions/2862322/… 而不是在数据表渲染时格式化日期和时间,只需在 json 响应中获取格式化的日期和时间,并在指向 ajax 请求中的 url 的文件中进行适当的计算。 【参考方案1】:

您的代码看起来是正确的,但不幸的是,如果没有进一步的帮助,javascript 并不擅长直观地对数字数组进行排序。例如:

var arr = [5,1,13,20,3];
arr.sort() returns [1,13,20,3,5];

所以你必须给它一个函数来帮助它不仅处理第一个数字,然后是第二个数字(如果有的话,等等),而是从 10 > 2 的角度来思考。

相信你已经知道了:

arr.sort(function(a,b)return a - b);  // asc
arr.sort(function(a,b)return b - a); // desc

查看此链接以获取有助于按日期时间正确排序的插件代码: https://datatables.net/plug-ins/sorting/datetime-moment

我希望这会有所帮助。

【讨论】:

以上是关于DataTables 出现日期和时间降序的问题的主要内容,如果未能解决你的问题,请参考以下文章

如何按日期降序对 NSDate 进行排序,但在该日期内时间升序?

网站上的日期排序不正确?

jQuery Datatables Ultimate 日期/时间排序插件

MySQLi + PHP 按日期和 ID 降序排序

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

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