【问题标题】:Jquery Datatable Sort by date ErrorJquery Datatable 按日期排序错误
【发布时间】:2012-07-03 05:53:20
【问题描述】:

这是代码..

     $.fn.dataTableExt.oSort['us_date-asc'] = function (a, b) { 

        var x = new Date(a),
         y = new Date(b);
        return ((x < y) ? -1 : ((x > y) ? 1 : 0));
    };

    $.fn.dataTableExt.oSort['us_date-desc'] = function (a, b) {
        var x = new Date(a),
         y = new Date(b);
        return ((x < y) ? 1 : ((x > y) ? -1 : 0));
    };

    var oTable = $('#example').dataTable({
        "bJQueryUI": true,
        "sPaginationType": "full_numbers",
        //"bSortClasses": false,
        "aoColumns": [
        null, null,
        {
            "sType": "us_date"
        },
        null,
        {
            "bSortable": false
        }],
        "aaSorting": [
            [2, "desc"]
        ]
    });

我正在为数据表使用此代码以使第三列可排序。 我想以 jun-06-2012 格式显示日期。当我使用 06-06-2012 格式时,排序工作正常......但是当月份按字母顺序表示时,排序不起作用(它在 chrome 中有效,但在其他浏览器中无效) ... 我该如何解决这个问题?任何帮助将不胜感激

【问题讨论】:

    标签: jquery datatables


    【解决方案1】:
    jQuery.fn.dataTableExt.oSort['shortdate-asc']  = function(x,y) {
            var months = {}; 
                    months["JAN"] = "01"; 
                    months["FEB"] = "02"; 
                    months["MAR"] = "03"; 
                    months["APR"] = "04"; 
                    months["MAY"] = "05"; 
                    months["JUN"] = "06"; 
                    months["JUL"] = "07"; 
                    months["AUG"] = "08"; 
                    months["SEP"] = "09"; 
                    months["OCT"] = "10"; 
                    months["NOV"] = "11"; 
                    months["DEC"] = "12";
    
            x = (x=="")? 0 : x.split('-');
            y = (y=="")? 0 : y.split('-');
    
            if(x.length){
                x = x[2] + months[x[0].toUpperCase()] + x[1];
            }
    
            if(y.length){
                y = y[2] + months[y[0].toUpperCase()] + y[1];
            }
    
    
    
            return ((x < y) ? -1 : ((x > y) ?  1 : 0)); 
        }; 
    
    
        jQuery.fn.dataTableExt.oSort['shortdate-desc']  = function(x,y) { 
    
            var months = {}; 
                    months["JAN"] = "01"; 
                    months["FEB"] = "02"; 
                    months["MAR"] = "03"; 
                    months["APR"] = "04"; 
                    months["MAY"] = "05"; 
                    months["JUN"] = "06"; 
                    months["JUL"] = "07"; 
                    months["AUG"] = "08"; 
                    months["SEP"] = "09"; 
                    months["OCT"] = "10"; 
                    months["NOV"] = "11"; 
                    months["DEC"] = "12";
    
            x = (x=="")? 0 : x.split('-');
            y = (y=="")? 0 : y.split('-');
    
            if(x.length){
                x = x[2] + months[x[0].toUpperCase()] + x[1];
            }
    
            if(y.length){
                y = y[2] + months[y[0].toUpperCase()] + y[1];
            }
    
            return ((x < y) ?  1 : ((x > y) ? -1 : 0)); 
        }; 
    

    【讨论】:

      【解决方案2】:

      您可以使用 datejs 之类的库将仲裁字符串转换为实际的 Date 对象并进行比较。这个想法是将您显示的内容与实际比较的内容分开。

      示例代码:

      var x = Date.parse('06-jun-2012');
      var y = Date.parse('06-jul-2012');
      return Date.compare(x, y);
      

      您可以使用日期对象的 toString() 方法并指定自定义格式字符串。查看文档http://code.google.com/p/datejs/wiki/APIDocumentation

      如果这碰巧是一次性任务,您可能不想承担另一个库的依赖关系。但是,如果您碰巧在整个应用程序中处理日期,您会想要使用这个库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-30
        • 1970-01-01
        • 2019-11-10
        • 2020-05-07
        • 2019-06-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多