【问题标题】:DataTables and moment.js not sorting by date correctlyDataTables 和 moment.js 未正确按日期排序
【发布时间】:2018-10-11 10:39:30
【问题描述】:

我正在尝试使用 https://datatables.net/blog/2014-12-18 上的信息来使 DataTables 对 dd/mm/yyyy 格式的日期列进行排序,例如11/10/2018(代表 2018 年 10 月 11 日)。

我已包含以下脚本 - 按此顺序:

  • jquery.dataTables.1.10.7.min.js(本地托管)
  • //cdn.datatables.net/plug-ins/1.10.19/sorting/datetime-moment.js
  • moment.js(2.10.3 版,本地托管)

根据上面 URL 上的信息,我的 DataTables 初始化如下所示:

$(document).ready(function() {
    $.fn.dataTable.moment( 'd/m/Y' );

    $('#coursesTable').DataTable({"searching": false
    });
});

但是当我单击#coursesTable 中的日期标题时,它会给出以下输出:

显然这是错误的,因为如果日期是按时间顺序排列的——最近的在前——那么06/09/2017 应该出现在07/08/2017 之前——但这不是它们出现的顺序。

当以其他方式(最旧的优先)订购它们时,它会给出相同的错误 - 即顺序仍然不正确:

我不明白为什么会这样?

【问题讨论】:

  • 你试过$.fn.dataTable.moment( 'dd/MM/YYYY' );
  • 您应该提供您正在使用的数据的示例,和/或您如何初始化 DataTable。
  • 初始化代码在@davidkonrad那里。数据通过 PHP 脚本在页面加载时呈现,它只是输出日期,如图所示 - 例如06/02/2017

标签: jquery datatables


【解决方案1】:

尝试把格式改成这个,根据Moment.js Documentation

$.fn.dataTable.moment( 'DD/MM/YYYY' );

这是一个有效的小提琴:http://jsfiddle.net/4f275sa1/

正如@davidkonrad 所建议的,不需要 columnDefs。在这种情况下,“DD/MM/YYYY”是正确的格式,因为该问题使用的日期和月份都带有前导零。

【讨论】:

  • 从“dd/MM/yyyy”(C# en-gb 语言环境格式)更改为“DD/MM/YYYY”对我有用。
【解决方案2】:

文档真的很模糊,但是你还是需要定义列type

columnDefs: [{
  target: 0, //index of column
  type: 'datetime-moment'
}]

正如@DavidCzadilek 评论,您需要使用另一种日期格式$.fn.dataTable.moment('D/M/YYYY')(建议的DD/MM/YYYY工作)

http://jsfiddle.net/xmhn4wpj/

【讨论】:

  • 或使用columns.rendercolumnDefs.render(参见columns.renderColumn Rendering的文档),如render: function ( data, type, row ) {return moment(data).format('d/m/Y');},通过提供任何有效的date字符串(如直接来自SQL的YYYY-MM-DD ) momentjs 接受。
  • @GregBologna,不是错误,但实际上是给定示例的正确方法。强制 dataType if 你只有好的数据是“错误的”(或多余的),但如果你有像null 值等不好的数据,你确实可以做的唯一事情。这不仅适用于“时刻日期”,而且适用于任何默认类型,如数字、字符串、日期、百分比等......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多