2017-01-02 67 views
3

..のDataTable日付範囲フィルタ日付範囲フィルタを追加する方法

などから-に

私は定期的な検索と改行などをしています。 しかし、私はどのように日付範囲フィルタを作成するのか分かりません。

私はDatatables 1.10.11バージョンを使用しています。

マイコード:

var oTable; 

function callFilesTable($sPaginationType, $bPaginate, $bFilter, $iDisplayLength, $fnSortcol, $fnSortdir){ 

    $.extend($.fn.dataTableExt.oStdClasses, { 
     sSortAsc : 'header headerSortDown', 
     sSortDesc : 'header headerSortUp', 
     sSortable : 'header' 
    }); 

    oTable = $('#sort').DataTable({ 
     dom : '<"table-controls-top"fl>rt<"table-controls-bottom"ip>', 
     pagingType : $sPaginationType, 
     paging : $bPaginate, 
     searching : $bFilter, 
     pageLength : $iDisplayLength, 
     order : [ [$fnSortcol, $fnSortdir] ], 
     columnDefs : [ 
      { 
       width  : '50%', 
       targets : [ 2 ], 
       orderable : true, 
       searchable : true, 
       type  : 'natural' 
      }, 
      { 
       width  : '10%', 
       targets : [ 3 ], 
       orderable : true 
      }, 
      { 
       width  : '20%', 
       targets : [ 4 ], 
       orderable : true 
      }, 
      { 
       targets : ['_all'], 
       orderable : false, 
       searchable : false 
      } 
     ], 
     language : paginationTemplate, 
     drawCallback : function() { 

      checkSelecta(); 
      placeHolderheight(); 

      // hide pagination if we have only one page 
      var api = this.api(); 
      var pageinfo = api.page.info(); 
      var paginateRow = $(this).parent().find('.dataTables_paginate'); 

      if (pageinfo.recordsDisplay <= api.page.len()) { 
       paginateRow.css('display', 'none'); 
      } else { 
       paginateRow.css('display', 'block'); 
      } 
     } 
    }); 

    oTable.on('length.dt', function (e, settings, len) { 
     updateSession({ iDisplayLength: len }); 
    }); 
} 

そして、私はNaturalSort 0.7バージョンを使用しています。

+0

datatablesサイトに範囲プラグインがありますか、それを見ましたか? https://www.datatables.net/examples/plug-ins/range_filtering.html – Bindrid

+0

@Bindridはい、動作しません。エラーを取得する:未知の型エラー:未定義の の配列のプロパティ 'substring'を読み取ることができません。 (range_dates.js:30) –

+0

私はそれを使って遊んでいます。私が働いている場合は – Bindrid

答えて

8

私はhttps://www.datatables.net/examples/plug-ins/range_filtering.htmlに私の作業基盤を得ました。ここに私のjsfiddleですhttps://jsfiddle.net/bindrid/2bkbx2y3/6/

$(document).ready(function() { 
     $.fn.dataTable.ext.search.push(
      function (settings, data, dataIndex) { 
     var min = $('#min').datepicker("getDate"); 
     var max = $('#max').datepicker("getDate"); 
     var startDate = new Date(data[4]); 
     if (min == null && max == null) { return true; } 
     if (min == null && startDate <= max) { return true;} 
     if(max == null && startDate >= min) {return true;} 
     if (startDate <= max && startDate >= min) { return true; } 
     return false; 
    } 
    ); 


     $("#min").datepicker({ onSelect: function() { table.draw(); }, changeMonth: true, changeYear: true }); 
     $("#max").datepicker({ onSelect: function() { table.draw(); }, changeMonth: true, changeYear: true }); 
     var table = $('#example').DataTable(); 

     // Event listener to the two range filtering inputs to redraw on input 
     $('#min, #max').change(function() { 
      table.draw(); 
     }); 
    }); 
+0

を投稿しますが、あなたのjsfiddleで日付をdd/mm/yyyyに変更し、それが動作していない...そしてdatepickerの日付形式を変更すると... –

+0

updated jsfidddle https://jsfiddle.net/ bindrid/2bkbx2y3/9/jquery datepickerでyyyyを使用している場合は、それが問題の一部です。各yは2つの場所を表し、dd/mm/yyでなければなりません。 – Bindrid

+0

@Bindridエレガントなソリューション。ありがとうございました。 'dd/mm/yy'フォーマットに関して、なぜあなたは余分なコードが必要なのか分かりません。 Javascript Dateオブジェクトはどちらの形式でも動作します(https://jsfiddle.net/2bkbx2y3/123/を参照)。 – Demetris

関連する問題