2016-08-05 14 views
0

jQuery DataTablesを使用して、2つの異なる日付型のデータ列をソートしようとしています。Jqueryデータ型日付ソート

月/年と日/月/年の2つの形式がありますが、正しく並べ替えられません。

現在のコード:

function dateSorter(a, b) { 
    var datea = a.split("/"); 
    var dateb = b.split("/"); 

    if (datea[1] > dateb[1]) return 1; 
    if (datea[1] < dateb[1]) return -1; 
    if (datea[0] > dateb[0]) return 1; 
    if (datea[0] < dateb[0]) return -1; 
    if(datea.length == 2) 
    { 
    if (datea[2] > dateb[2]) return 1; 
    if (datea[2] < dateb[2]) return -1; 
    } 
    else 
    { 
    if(datea[1] > dateb[2]) return 1; 
    if(datea[2] < dateb[1]) return -1; 
    } 
    return 0; 
} 

以上が現在のコードで、それは月/年の形式のために働くと罰金、それらをソートしますが、両方のフォーマットと混合していません。

これは現在、日/月/年の形式から日/月をソートしますが、年を正しくソートしません。

例(現在は):

03/04/2016 
12/04/2017 
12/05/2015 
01/2015 
02/2015 
02/2016 
01/2018 
... 

それは次のようになります。

01/2015 
02/2015 
12/05/2015 
02/2016 
03/04/2016 
12/04/2017 
01/2018 

答えて

1
$.extend(jQuery.fn.dataTableExt.oSort, { 
    "date-time-odd-pre": function (a){ 
     if(/\d{1,2}\/\d{1,2}\/\d{4}/.test(a)){ 
      return parseInt(moment(a, "DD/MM/YYYY").format("X"), 10); 
     }else{ 
      return parseInt(moment(a, "MM/YYYY").format("X"), 10); 
     } 
    }, 
    "date-time-odd-asc": function (a, b) { 
     return a - b; 
    }, 
    "date-time-odd-desc": function (a, b) { 
     return b - a; 
    } 
}); 

万一work、あなたが利用できる瞬間が必要になりますけれども。

希望に役立ちます。

+0

+1、これはうまくいくと思いますが、カスタムソートプラグインの誤解にも基づいています: '-pre'と' -asc'関数と '-desc'関数の両方の使い方はあまり意味がありません。 dataTablesの自動検出型のソートに固定値を渡す '-pre'関数を持っているか、**または**演算を行う' -asc'と '-desc'メソッドがあります。両方を持つことはできません。コードを試してみると、 'date-time-odd-asc'と' date-time-odd-desc'は全く決して実行されません。私もこの誤解を抱えていました。多くの古いプラグインにもこの冗長性が含まれています。 – davidkonrad

+0

今私は知らなかった、ありがとう@davidkonrad – annoyingmouse