2016-10-30 19 views
0

日付の並べ替えに問題があり、並べ替え中に月が含まれず、日付のみで並べ替えられませんでした。日付の並べ替えがデータテーブルで機能しない

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "datetime-pre": function (a) { 
     var ukDatea = a.split('/'); 
     return (ukDatea[2] + ukDatea[1] + ukDatea[0]) * 1; 
    }, 

    "datetime-asc": function (a, b) { 
     return ((a < b) ? -1 : ((a > b) ? 1 : 0)); 
    }, 

    "datetime-desc": function (a, b) { 
     return ((a < b) ? 1 : ((a > b) ? -1 : 0)); 
    } 
    }); 
    var dt = $('#wires').DataTable({ 
     "aoColumns": [ 
      null, 
      null, 
      { "sType": "datetime" }, 
      { "sType": "datetime" }, 
      null,null,null,null,null,null,null,null,null,null,null,null,null,null 
     ], 

をしかし、今列のソート(データテーブルヘッダの一部)のみ日付を含む列の一つで動作していない: 私は次のコードを追加することによってそれを解決しました。 アドバイスや解決策はありますか?

+0

完全なスニペットにHTMLも添付できますか? – Bellu

答えて

0

ソートしようとしている日付形式は何ですか?

私はpt-BR日付(dd/MM/yyyy)と日付時刻(dd/MM/yyyy HH:mm:ss)をソートする関数を作った。私は適切に比較するために日付を整数に変換しなければならなかった。たとえば、次のように

jQuery.extend(jQuery.fn.dataTableExt.oSort, { 
    "br_datetime-asc": function (a, b) { 
     var x, y; 
     if (jQuery.trim(a) !== '') { 
      var deDatea = jQuery.trim(a).split(' '); 
      var deTimea = deDatea[1].split(':'); 
      var deDatea2 = deDatea[0].split('/'); 
      if (typeof deTimea[2] !== 'undefined') { 
       x = (deDatea2[2] + deDatea2[1] + deDatea2[0] + deTimea[0] + deTimea[1] + deTimea[2]) * 1; 
      } else { 
       x = (deDatea2[2] + deDatea2[1] + deDatea2[0] + deTimea[0] + deTimea[1]) * 1; 
      } 
     } else { 
      x = Infinity; // = l'an 1000 ... 
     } 

     if (jQuery.trim(b) !== '') { 
      var deDateb = jQuery.trim(b).split(' '); 
      var deTimeb = deDateb[1].split(':'); 
      deDateb = deDateb[0].split('/'); 
      if (typeof deTimeb[2] !== 'undefined') { 
       y = (deDateb[2] + deDateb[1] + deDateb[0] + deTimeb[0] + deTimeb[1] + deTimeb[2]) * 1; 
      } else { 
       y = (deDateb[2] + deDateb[1] + deDateb[0] + deTimeb[0] + deTimeb[1]) * 1; 
      } 
     } else { 
      y = Infinity; 
     } 
     var z = ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
     return z; 
    }, 

    "br_datetime-desc": function (a, b) { 
     var x, y; 
     if (jQuery.trim(a) !== '') { 
      var deDatea = jQuery.trim(a).split(' '); 
      var deTimea = deDatea[1].split(':'); 
      var deDatea2 = deDatea[0].split('/'); 
      if (typeof deTimea[2] !== 'undefined') { 
       x = (deDatea2[2] + deDatea2[1] + deDatea2[0] + deTimea[0] + deTimea[1] + deTimea[2]) * 1; 
      } else { 
       x = (deDatea2[2] + deDatea2[1] + deDatea2[0] + deTimea[0] + deTimea[1]) * 1; 
      } 
     } else { 
      x = Infinity; 
     } 

     if (jQuery.trim(b) !== '') { 
      var deDateb = jQuery.trim(b).split(' '); 
      var deTimeb = deDateb[1].split(':'); 
      deDateb = deDateb[0].split('/'); 
      if (typeof deTimeb[2] !== 'undefined') { 
       y = (deDateb[2] + deDateb[1] + deDateb[0] + deTimeb[0] + deTimeb[1] + deTimeb[2]) * 1; 
      } else { 
       y = (deDateb[2] + deDateb[1] + deDateb[0] + deTimeb[0] + deTimeb[1]) * 1; 
      } 
     } else { 
      y = Infinity; 
     } 
     var z = ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
     return z; 
    }, 

    "br_date-asc": function (a, b) { 
     var x, y; 
     if (jQuery.trim(a) !== '') { 
      var deDatea = jQuery.trim(a).split('/'); 
      x = (deDatea[2] + deDatea[1] + deDatea[0]) * 1; 
     } else { 
      x = Infinity; // = l'an 1000 ... 
     } 

     if (jQuery.trim(b) !== '') { 
      var deDateb = jQuery.trim(b).split('/'); 
      y = (deDateb[2] + deDateb[1] + deDateb[0]) * 1; 
     } else { 
      y = Infinity; 
     } 
     var z = ((x < y) ? -1 : ((x > y) ? 1 : 0)); 
     return z; 
    }, 

    "br_date-desc": function (a, b) { 
     var x, y; 
     if (jQuery.trim(a) !== '') { 
      var deDatea = jQuery.trim(a).split('/'); 
      x = (deDatea[2] + deDatea[1] + deDatea[0]) * 1; 
     } else { 
      x = Infinity; 
     } 

     if (jQuery.trim(b) !== '') { 
      var deDateb = jQuery.trim(b).split('/'); 
      y = (deDateb[2] + deDateb[1] + deDateb[0]) * 1; 
     } else { 
      y = Infinity; 
     } 
     var z = ((x < y) ? 1 : ((x > y) ? -1 : 0)); 
     return z; 
    } 
}); 

編集: そして、あなたがbr_datetimeやbr_dateを設定する必要がありcolumnDefsで日付 "25/03/2016" の整数20160325.

になるには、見てみましょう。または、カスタム機能でタイプ検出プラグイン(https://datatables.net/plug-ins/type-detection/)を使用してください:

jQuery.fn.dataTableExt.aTypes.unshift(
    function (sData) { 
     if (sData !== null && typeof sData !== 'string') { 
      sData = sData.toString(); 
     } 
     if (sData !== null && sData.match(/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20|21)\d\d$/)) { 
      return 'br_date'; 
     } 
     else if (sData !== null && sData.match(/^(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/(19|20|21)\d\d [0-9]{2}:[0-9]{2}(:[0-9]{2})?$/)) { 
      return 'br_datetime'; 
     } 
     return null; 
    } 
); 
関連する問題