【问题标题】:Sorting dates in DataTables? (function override)在 DataTables 中对日期进行排序? (功能覆盖)
【发布时间】:2018-12-22 07:59:58
【问题描述】:

DataTables 仅以 YYYY-MM-DD 格式正确排序日期。他们排序为string的所有其他格式。

就我不喜欢在我的项目中为每个功能添加库/插件而言,我试图自己解决它。

DataTables 使用Date.parse() 函数来“理解”日期并对其进行排序。 (根据https://datatables.net/blog/2014-12-18)。 所以我决定重写该函数并以它“理解”其他日期格式的方式对其进行修改。

我将这个 JS 添加到我的代码中:

            let origFunction = Date.parse;

            Date.parse = function(str) {

                // I want to parse this date format: 27.01.2018
                if (str.indexOf('.') > 0) {
                    str = convertDateToISO(str); // my function translates date into 2018-01-27
                }
                return origFunction(str);
            };

当我在浏览器控制台中对此进行测试时,Date.parse 与我的日期格式完美匹配,但 DataTables 继续将我的欧洲日期排序为字符串。

知道我做错了什么吗?或者有可能这样做吗?

已解决:

毕竟看起来最简单的方法是包含“Moment.js”插件,如下所述:https://datatables.net/blog/2014-12-18#Operation 但是,虽然我的问题中有“无插件”要求,但我也接受@billynoah 的回答作为解决方案。

【问题讨论】:

  • 看看这篇文章:stackoverflow.com/questions/53146427/…。我在那里回答了如何在呈现列数据时使用type 参数。
  • 嗯,我刚刚在我链接的文章中包含了 CDN 中的 Moment.js,然后我在我的代码中添加了一个新行:$.fn.dataTable.moment('DD.MM.YYYY');,就是这样。它就像一个魅力。不过还是谢谢。
  • 是的,我知道,但是当您不想使用Moment 或者当您例如在列上呈现图标并需要对其进行一些排序时,这是另一种选择。

标签: javascript datatables overriding


【解决方案1】:

您可能想看看orthogonal-data。这允许您定义用于对列进行排序的自定义值。在这种情况下,最直接的做法是使用时间戳进行排序,然后您可以以任何您想要的格式显示日期。对于来自对象或 ajax 的数据,您可以像这样构建列定义:

{
    data: 'date',
    render: {
        _: 'display',
        sort: 'timestamp'
    }
}

对于html源你可以使用data-order属性:

<td data-order="1545466488">Sat, Dec 22nd 2018</td>

(免责声明/署名:这或多或少直接来自上面链接的手册)

【讨论】:

  • 谢谢,但无论如何...我很好奇为什么覆盖 Date.parse 不起作用:)
  • 我还没有真正深入研究源代码以获得足够的上下文来对此发表评论。我认为他们已经提供了一种方便的方法来完成自定义排序和对源进行修改似乎是一个危险的方向。也就是说,当事情没有按照您的预期进行时,寻求更好的理解总是好的。
  • 我真的很喜欢 Datatables,多年来他们为改进和构建项目做了很多工作。为你的项目干杯并祝你好运
猜你喜欢
  • 1970-01-01
  • 2018-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-15
  • 2020-09-29
  • 1970-01-01
  • 2015-06-28
  • 1970-01-01
相关资源
最近更新 更多