0

ここにコードがあります..

     $.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"]
        ]
    });

3番目の列をソート可能にするために、データテーブルにこのコードを使用しています。日付を jun-06-2012 形式で表示したい .06-06-2012 形式を使用している場合、並べ替えは正常に機能します...しかし、月がアルファベット順に表されている場合、並べ替えは機能しません (Chrome では機能しますが、他のブラウザーでは機能しません)。 ...どうすればこれに取り組むことができますか? どんな助けでも大歓迎です

4

2 に答える 2

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)); 
    }; 
于 2012-07-03T06:41:39.770 に答える
0

datejsのようなライブラリを使用して、arbit 文字列を実際の 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を確認してください

これがたまたま 1 回限りのタスクである場合、別のライブラリの依存関係を引き受けたくない場合があります。ただし、アプリ全体で日付を操作する場合は、このライブラリを使用することをお勧めします。

于 2012-07-03T07:02:00.210 に答える