【问题标题】:datatables: sorting a date-range column数据表:对日期范围列进行排序
【发布时间】:2012-09-17 09:31:00
【问题描述】:

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

{ "sType": "date-range", "aTargets": [0] }

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

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

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

注意:我知道我可以对隐藏字段进行排序。这给我带来了其他问题,我想知道我是否可以通过其他方式解决问题。

【问题讨论】:

    标签: date sorting datatables


    【解决方案1】:

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

    要向 DataTables 添加新的排序函数,您需要将函数附加到对象 $.fn.dataTableExt.oSort。例如,下面添加了一个'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));
    };
    

    上面的代码可能被破坏了......但它应该让你走上正轨

    mtmurdock 的解决方案

    将此代码添加到 site.js(或在数据表之后导入的任何地方):

    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;
        }
    });
    

    然后在你的表定义上设置 aoColumnDefs 像这样:

    { "sType": "my-date-range", "aTargets": [0] }
    

    【讨论】:

    • 太棒了。我实际上只是想通了这一点。我什至没有在文档中找到它。我不得不拆开一个扩展,但我得到了它的工作。我实际上最终使用了其他一些功能。我会将我的解决方案附加到您的答案中。
    • 我喜欢你的格式。对象文字符号对我来说看起来不错。很高兴你解决了。
    猜你喜欢
    • 2019-01-02
    • 1970-01-01
    • 2019-08-26
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多