2017-01-02 6 views
3

Как добавить диапазон дат фильтр ..DataTables Диапазон дат фильтра

как Из-To.

У меня есть рабочий регулярный поиск и разбивка на страницы и т. Д. Но я не знаю, как сделать фильтр диапазона дат.

Я использую 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 Да, но не работает. Ошибка при получении: Uncaught TypeError: Невозможно прочитать свойство подстроки undefined в Array. (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

обновлен jsfidddle https://jsfiddle.net/ bindrid/2bkbx2y3/9/Если вы используете yyyy в jquery datepicker, это часть проблемы. Каждый y представляет 2 места, которые должны быть dd/mm/yy. – Bindrid

+0

@Bindrid элегантный решение. Спасибо. Что касается формата 'dd/mm/yy', я не уверен, зачем вам нужен дополнительный код. Объект Date Javascript работает с любым форматом (см. Https://jsfiddle.net/2bkbx2y3/123/). – Demetris

Смежные вопросы