【问题标题】:Filter by date range in Datatable problem在数据表问题中按日期范围过滤
【发布时间】:2019-09-12 21:44:06
【问题描述】:

我正在数据表中实现日期范围过滤器,当以 YYYY-MM-DD 格式显示列日期时,过滤器工作得很好,但我需要以 DD-MM-YYYY 格式显示列,所以我申请了时刻。

使用数据表中的时刻回调函数:

{ targets : [8], 

render : function (data, type, row) {
   return  moment(data).format('DD/MM/YYYY')
}
},

因此,我看到列上显示了第二天。下图。 我想按日期过滤,列按以下格式排序 DD/MM/YYYY

显然我在 datepicker 过滤器中选择了第 10 天,它在表格上显示第 11 天。

    $(document).ready(function(){

    $.fn.dataTable.ext.search.push(
        function (settings, data, dataIndex) {
            var fecha_inicio = $('#fecha_inicio').datepicker("getDate");
            // alert(fecha_inicio);
            var fecha_fin = $('#fecha_fin').datepicker("getDate");
             var arr =  data[8].split('/').reverse().join('-');
             // alert(arr);
             // var temp = arr[0] +'-'+ arr[1] +'-'+arr[2]; 

             var startDate = new Date(arr);
             startDate.setHours(0,0,0,0);
              // alert(startDate);


            if (fecha_inicio == null && fecha_fin == null)      { return true;}
            if (fecha_inicio == null && startDate <= fecha_fin) { return true;}
            if(fecha_fin == null && startDate >= fecha_inicio)  { return true;}
            if (startDate <= fecha_fin && startDate >= fecha_inicio) { return true;}
            return false;
        }
    );

如果我取出回调代码,则列显示正确,日期格式除外。

提前致谢。

【问题讨论】:

    标签: javascript datatables momentjs


    【解决方案1】:

    也许你想使用type参数,例如

    render:function(data,type,row,meta){
        if(type=='display'){
            return moment(data).format('DD/MM/YYYY');
        }
        if(type=='filter'){
            //there is an example, show how to work, you can use whatever you want time format
            return moment(data).format('YYYY/MM/DD');
        }
         if(type=='sort'){
            //maybe there is timestamp format 
            return data;
        }
        return data;
    }
    

    更多详情请查看https://datatables.net/reference/option/columns.renderfunction render( data, type, row, meta )部分

    【讨论】:

    • 感谢 Thxopen,我猜问题出在回调函数中,使用日期格式,如上所示,我从日期选择器中获取两个范围日期,例如 var fecha_inicio = $('# fecha_inicio').datepicker("getDate");输出 //Mon Sep 10 2018 00:00:00 GMT-0300 (hora de verano de Chile) ,然后我将它与列 Fecha var arr = data[8].split('/').reverse().join 进行比较('-'); var startDate = new Date(arr); startDate.setHours(0,0,0,0);我认为日期比较的格式不正确。
    • 那么,你解决了吗?我建议你使用时间戳格式来比较一下,也许更容易。
    • 解决了以 var startDate = moment(arr,'YYYY-MM-DD'); 格式设置所有日期的问题然后比较使用 moment,js 函数 isSameOrAfter, isSameOrBefore 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    • 2014-10-20
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    相关资源
    最近更新 更多