У меня есть одна колонка даты, отформатированная '17/03/2012 '.datatables date filter
Я хотел бы иметь возможность выбрать дату начала и окончания, и если столбец 1-й даты выше в пределах этого диапазона дат, он будет фильтровать столбец.
Ниже приведен код им с помощью:
Start Date: <input type="text" id="dateStart" name="dateStart" size="30">
End Date: <input type="text" id="dateend" name="dateend" size="30">
<script type="text/javascript" charset="utf-8">
$.fn.dataTableExt.afnFiltering.push(
function(oSettings, aData, iDataIndex) {
var iFini = document.getElementById('dateStart').value;
var iFfin = document.getElementById('dateend').value;
var iStartDateCol = 2;
var iEndDateCol = 2;
iFini=iFini.substring(0,2) + iFini.substring(3,5)+ iFini.substring(6,10)
iFfin=iFfin.substring(0,2) + iFfin.substring(3,5)+ iFfin.substring(6,10)
var datofini=aData[iStartDateCol].substring(0,2) + aData[iStartDateCol].substring(3,5)+ aData[iStartDateCol].substring(6,10);
var datoffin=aData[iEndDateCol].substring(0,2) + aData[iEndDateCol].substring(3,5)+ aData[iEndDateCol].substring(6,10);
if (iFini == "" && iFfin == "")
{
return true;
}
else if (iFini <= datofini && iFfin == "")
{
return true;
}
else if (iFfin >= datoffin && iFini == "")
{
return true;
}
else if (iFini <= datofini && iFfin >= datoffin)
{
return true;
}
return false;
}
);
$(function() {
// Implements the dataTables plugin on the HTML table
var $oTable= $("#example").dataTable({
"sDom": '<"top"><"clear">t<"bottom"i><"clear">',
"iDisplayLength": 20,
"oLanguage": {
"sLengthMenu": 'Show <select><option value="25">25</option><option value="50">50</option><option value="100">100</option><option value="200">200</option></select>'
},
"bJQueryUI": true,
//"sPaginationType": "full_numbers",
"aoColumns": [
null,
null,
{ "sType": "date" }
]
});
$('#dateStart, #dateend').daterangepicker(
{
dateFormat: 'dd/mm/yy',
arrows: true
}
);
/* Add event listeners to the two range filtering inputs */
$('#dateStart').keyup(function() { oTable.fnDraw(); });
$('#dateend').keyup(function() { oTable.fnDraw(); });
/* Add event listeners to the two range filtering inputs */
$('#dateStart').change(function() { oTable.fnDraw(); });
$('#dateend').change(function() { oTable.fnDraw(); });
/* Add event listeners to the two range filtering inputs */
$('#name').keyup(function() { oTable.fnDraw(); });
$('#name').change(function() { oTable.fnDraw(); });
});
</script>
Любая помощь консультации по этому вопросу будет BVE чрезвычайно полезным. Заранее спасибо.
У меня уже есть это в моем коде, но он по-прежнему не работает. Я обновил свой вопрос с полным кодом. – Codded
@Codded Итак, я думаю, что проблема связана с форматом даты/синтаксическим разбором. Расширение вручную анализирует строку даты с двумя строками, которые выглядят как 'iFini = iFini.substring (6,10) + iFini.substring (3,5) + iFini.substring (0,2)'. Из того, что у него есть, похоже, что он что-то ожидает в формате MM/DD/YYYY. Я рекомендую вам изменить расширение на нечто менее жесткое, возможно, на фактический синтаксический анализатор, который может обрабатывать несколько форматов, например, тот, который вы описываете. Я думаю, что собственный объект даты javascript имеет встроенный метод синтаксического анализа, и если вы используете jQueryUI вообще, их датпикер тоже делает. – mbeasley
Изменен мой ответ снова для даты и ifini и т. Д. Фильтр работает, но таблица только перерисовывает себя, когда я нажимаю для сортировки столбца. Его не инициировать ничью, когда я выбрал дату. Я использую плагин daterangepicker. – Codded