最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Date range and Age range filter on datatable - Stack Overflow

programmeradmin4浏览0评论

I am trying to implement Daterange and age range filter for datatable.

I have successfully implement age filter. Here is fiddle: /

Here is jquery

$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
        if ($('#range').val().indexOf("+")>=0){
            var number=$('#range').val().slice(0,-1);
            //alert(number);
            return parseInt(data[1]) > parseInt(number || data[1]);
        }else if ($('#range').val().indexOf("-")>=0){
            var number=$('#range').val().split("-");
            //alert(number[0]);
            //alert(number[1]);
            return parseInt(data[1]) >= parseInt(number[0] || data[1])
                    && parseInt(data[1]) <= parseInt(number[1] || data[1]);
        }
    });
    $('#range').on('change',table.draw);

But when i am trying to implement Daterange and age range to no avail Here is fiddle: /

$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {

    var grab_daterange = $("#date_range").val();
    var give_results_daterange = grab_daterange.split(" to ");
    var filterstart = give_results_daterange[0];
    var filterend = give_results_daterange[1];
    var iStartDateCol = 5; //using column 2 in this instance
    var iEndDateCol = 5;
    var tabledatestart = aData[iStartDateCol];
    var tabledateend= aData[iEndDateCol];

    if ( filterstart === "" && filterend === "" )
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isBefore(tabledatestart)) && filterend === "")
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isAfter(tabledatestart)) && filterstart === "")
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isBefore(tabledatestart)) && (moment(filterend).isSame(tabledateend) || moment(filterend).isAfter(tabledateend)))
    {
        return true;
    }
    return false;
});


$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
        if ($('#range').val().indexOf("+")>=0){
            var number=$('#range').val().slice(0,-1);
            //alert(number);
            return parseInt(data[3]) > parseInt(number || data[3]);
        }else if ($('#range').val().indexOf("-")>=0){
            var number=$('#range').val().split("-");
            //alert(number[0]);
            //alert(number[1]);
            return parseInt(data[3]) >= parseInt(number[0] || data[3])
                    && parseInt(data[3]) <= parseInt(number[1] || data[3]);
        }
    });
$('#range').on('change',table.draw);

Please help.

I am trying to implement Daterange and age range filter for datatable.

I have successfully implement age filter. Here is fiddle: http://jsfiddle/7y8n0wLj/26/

Here is jquery

$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
        if ($('#range').val().indexOf("+")>=0){
            var number=$('#range').val().slice(0,-1);
            //alert(number);
            return parseInt(data[1]) > parseInt(number || data[1]);
        }else if ($('#range').val().indexOf("-")>=0){
            var number=$('#range').val().split("-");
            //alert(number[0]);
            //alert(number[1]);
            return parseInt(data[1]) >= parseInt(number[0] || data[1])
                    && parseInt(data[1]) <= parseInt(number[1] || data[1]);
        }
    });
    $('#range').on('change',table.draw);

But when i am trying to implement Daterange and age range to no avail Here is fiddle: http://jsfiddle/evcfespn/176/

$.fn.dataTableExt.afnFiltering.push(
function( oSettings, aData, iDataIndex ) {

    var grab_daterange = $("#date_range").val();
    var give_results_daterange = grab_daterange.split(" to ");
    var filterstart = give_results_daterange[0];
    var filterend = give_results_daterange[1];
    var iStartDateCol = 5; //using column 2 in this instance
    var iEndDateCol = 5;
    var tabledatestart = aData[iStartDateCol];
    var tabledateend= aData[iEndDateCol];

    if ( filterstart === "" && filterend === "" )
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isBefore(tabledatestart)) && filterend === "")
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isAfter(tabledatestart)) && filterstart === "")
    {
        return true;
    }
    else if ((moment(filterstart).isSame(tabledatestart) || moment(filterstart).isBefore(tabledatestart)) && (moment(filterend).isSame(tabledateend) || moment(filterend).isAfter(tabledateend)))
    {
        return true;
    }
    return false;
});


$.fn.dataTable.ext.search.push(function (settings, data, dataIndex) {
        if ($('#range').val().indexOf("+")>=0){
            var number=$('#range').val().slice(0,-1);
            //alert(number);
            return parseInt(data[3]) > parseInt(number || data[3]);
        }else if ($('#range').val().indexOf("-")>=0){
            var number=$('#range').val().split("-");
            //alert(number[0]);
            //alert(number[1]);
            return parseInt(data[3]) >= parseInt(number[0] || data[3])
                    && parseInt(data[3]) <= parseInt(number[1] || data[3]);
        }
    });
$('#range').on('change',table.draw);

Please help.

Share Improve this question asked Sep 11, 2017 at 12:47 Rahul SinghRahul Singh 91714 silver badges33 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 11 +25

I'd apply both criteria in your search extension:

$.fn.dataTable.ext.search.push(function(settings, data, dataIndex) {

  var fromAge, toAge, inEmpAgeRange, inEmpStartingDateRange;

  var empAge = parseInt(data[3]);
  var empStartDate = Date.parse(data[4]);

  if ($('#range').val().indexOf("+") >= 0) {
    fromAge = parseInt($('#range').val().slice(0, -1));
    toAge = null;
  } else if ($('#range').val().indexOf("-") >= 0) {
    var ageRange = $('#range').val().split("-");
    fromAge = parseInt(ageRange[0]);
    toAge = parseInt(ageRange[1]);
  }

  inEmpAgeRange = (empAge >= fromAge || empAge) &&
    toAge !== null ? (empAge <= (toAge || empAge)) : true;

  inEmpStartingDateRange = (dateRangeStart && dateRangeEnd) ?
    (moment(empStartDate).isSameOrAfter(dateRangeStart) &&
     moment(empStartDate).isSameOrBefore(dateRangeEnd)) : true;

  return inEmpAgeRange && inEmpStartingDateRange;
});

... with setting the values of dateRangeStart and dateRangeEnd earlier in the picker event handlers:

$("#date_range").on('apply.daterangepicker', function(ev, picker) {
  dateRangeStart = picker.startDate;
  dateRangeEnd = picker.endDate;
  $(this).val(dateRangeStart.format('YYYY-MM-DD') + ' to ' + dateRangeEnd.format('YYYY-MM-DD'));
  table.draw();
});

$("#date_range").on('cancel.daterangepicker', function(ev, picker) {
  dateRangeStart = dateRangeEnd = null;
  $(this).val('');
  table.draw();
});

Updated demo: http://jsfiddle/1rr3qpjx/2/

change

var iStartDateCol = 5; //using column 2 in this instance
var iEndDateCol = 5;

to

var iStartDateCol = 4; //using column 2 in this instance
var iEndDateCol = 4

your dates are in fourth column of aData

发布评论

评论列表(0)

  1. 暂无评论