数据表中的日期范围过滤器未按预期工作

时间:2016-12-21 07:55:23

标签: jquery html date datatables

我写了一个带有日期范围过滤器的数据表。在Minimum Date:Maximum Date:中,我分别使用固定值01/01/201001/01/2012。页面加载时,属于给定日期范围的日期应自动加载。但即使有些日期明显超出给定范围,它也不会发生 Maybe this JSFiddle link can explain it better.
我的jQuery代码是:

/*$('#data').dataTable();*/
$(function() {
  $('#minDate').datepicker();
  $('#maxDate').datepicker();
});
// Function for converting a mm/dd/yyyy date value into a numeric string for comparison (example 08/12/2010 becomes 20100812
function parseDateValue(rawDate) {
  var dateArray = rawDate.split("/");
  var parsedDate = dateArray[2] + dateArray[0] + dateArray[1];
  return parsedDate;
}
$.fn.dataTableExt.afnFiltering.push(
  function(oSettings, aData, iDataIndex) {
    var iFini = parseDateValue(document.getElementById('minDate').value);
    var iFfin = parseDateValue(document.getElementById('maxDate').value);
    var evalDate = parseDateValue(aData[4]);

    if (evalDate >= iFini && evalDate <= iFfin) {
      return true;
    } else {
      return false;
    }

  }
);
$(document).ready(function() {
  var table = $('#data').DataTable({
    dom: 'Bfrtip',
    buttons: [
      'copyHtml5',
      'excelHtml5',
      'csvHtml5',
      'pdfHtml5'
    ]
  });

  // Event listener to the two range filtering inputs to redraw on input
  $('#minDate, #maxDate').keyup(function() {
    table.draw();
  });
});

如何在页面加载时使数据表根据固定值过滤数据?

2 个答案:

答案 0 :(得分:1)

你在这里混合苹果和橘子。您的日期采用不同的格式,输入为DD/MM/YYYY,表格行为YYYY/MM/DD,难怪出现问题。我将使用另一个库momentjs,并使用此代码:

$.fn.dataTableExt.afnFiltering.push(
  function(oSettings, aData, iDataIndex) {
    var iFini = ~~moment($('#minDate').val(), "DD/MM/YYYY").format("X");
    var iFfin = ~~moment($('#maxDate').val(), "DD/MM/YYYY").format("X");
    var evalDate = ~~moment(aData[4], "YYYY/MM/DD").format("X");
    if (evalDate >= iFini && evalDate <= iFfin) {
      return true;
    } else {
      return false;
    }
  }
);

希望有所帮助。

答案 1 :(得分:0)

您遇到的问题是您使用函数 parseDateValue 来比较过滤器中的日期以及表中的日期,然后再比较它们,但是,表行中的日期格式是与过滤器中的日期格式不同,因此您将获得:

  

min date = 01/01/2010 =&gt; 20100101

     

最大日期= 01/01/2012 =&gt; 20120101

,例如你的第一行

  

date = 2011/04/25 =&gt; 25201104

因此,当你进行比较时,它不会很好。

但是如果您更改行中的日期格式(例如25/04/2011),它将正常工作。