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 日期/时间排序插件