当前位置: 首页 > 知识库问答 >
问题:

datatable:对日期范围列进行排序

澹台景辉
2023-03-14

我有一个带有aoColumnDefs的数据表,其中包含:

{“sType”:“日期范围”,“目标”:[0]}

此列中的日期是格式为“MM/dd/yyyy-MM/dd/yyyy”的字符串。不幸的是,此列当前排序不正确。它不是按年、月、日排序,而是按月、日、年排序。

我假设这是一个日期格式问题(因为它是从左到右排序日期部分,假设我的日期是yyyy/mm/dd)。

在对数据表上的日期进行排序时,有没有办法设置使用的日期格式?

注意:我知道我可以对隐藏字段进行排序。这给我带来了其他问题,我想知道我是否可以用另一种方法解决这个问题。

共有1个答案

丁良骏
2023-03-14

从这里开始:http://datatables.net/development/sorting#type_based

要向DataTables添加新的排序函数,需要将函数附加到对象$。fn。dataTableExt。奥索尔。例如,下面添加了类型为“string case”的区分大小写排序函数:

jQuery.fn.dataTableExt.oSort['date-range-asc']  = function(x,y) {
    //x = "MM/dd/yyyy - MM/dd/yyyy";
    var regex = /(\d{2}\/\d{2}\/\d{4})/,
        matchesX = regex.exec(x),
        matchesY = regex.exec(y);        

    //for example, only sort on first date..
    x = Date.parse(matchesX[0]);
    y = Date.parse(matchesY[0]);

    return ((x < y) ? -1 : ((x > y) ?  1 : 0));
};

上面的代码可能已被破解。。。但这会让你走上正轨

默多克的解决方案

将此代码添加到站点。js(或在datatables之后导入的任意位置):

jQuery.extend(jQuery.fn.dataTableExt.oSort, {
    "my-date-range-pre": function (a) {
        var ukDatea = a.split('/');

        var year = $.trim(ukDatea[2].split('-')[0]);
        var month = $.trim(ukDatea[0]);
        var day = $.trim(ukDatea[1]);

        if (month.length == 1)
            month = "0" + month;
        if (day.length == 1)
            day = "0" + day;

        return (year + month + day) * 1;
    },

    "my-date-range-asc": function (a, b) {
        var result = ((a < b) ? -1 : ((a > b) ? 1 : 0));
        return result;
    },

    "my-date-range-desc": function (a, b) {
        var result = ((a < b) ? 1 : ((a > b) ? -1 : 0));
        return result;
    }
});

然后在表定义中设置AOColumnDef,如下所示:

{ "sType": "my-date-range", "aTargets": [0] }
 类似资料:
  • 问题内容: 如何对日期和/或日期时间对象列表进行排序?接受的答案在这里是不是为我工作: 问题答案: 你得到,因为它运行 在原地 ,这意味着它不返回任何东西,但修改列表本身。您只需要呼叫而无需再次分配。 有一个内置函数,该函数返回列表的排序版本-也会执行您想要的操作。

  • 我使用的是jquery数据表。我在做日期范围筛选。当我选择“最小日期”和“最大日期”时,结果是数据表上没有筛选数据。我用了剧本 null null null null 日期格式为YYYY-MM-DD。每次我用日期范围搜索时,结果不会出现在数据表中。请帮帮我,我哪里做错了。谢谢。

  • 问题内容: 源表如下: 我想得到以下输出: 我必须使用循环来填充此表吗? 谢谢 问题答案: 您可以使用技巧来查询 演示

  • 问题内容: 我有这样的文件: 是否可以按日期查询最近10天发布的文档数量?例如: 问题答案: 是的,您可以使用聚合轻松实现这一点,如下所示:

  • 我用footable library来展示桌子。每一行都有一个日期列,我想按日期列对该表进行排序(在列标题上单击)。 变量包含格式为的日期,因此: 如果我使用我可以在正确的欧元区(dd/MM/yyyy)样式中看到日期,但我无法正确排序 PS:另外两列(Titolo,InviatoDa)按字母顺序排序,工作正常。

  • 问题内容: 我有一个日期变量:如果所说的日期在TODAY的3天内,我想返回一个布尔值。我不太确定如何在Python中构造它。我只处理日期,不处理日期时间。 我的工作示例是“宽限期”。一个用户登录到我的网站,如果宽限期在今天的3天之内,则该用户将省略其他脚本等。 我知道您可以在Python的日期模块中做一些花哨/复杂的事情,但我不确定在哪里看。 问题答案: 在Python中检查范围,您可以使用: