我写了一个带有日期范围过滤器的数据表。在Minimum Date:
和Maximum Date:
中,我分别使用固定值01/01/2010
和01/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();
});
});
如何在页面加载时使数据表根据固定值过滤数据?
答案 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
),它将正常工作。