php - DataTables columnFilter number-range 过滤

标签 php sql filter datatables datatables-1.10

我有数据库,其中 “BIRTH_DATE” 列中有日期(例如 2015-06-26)。我使用 DataTables 为用户显示信息。我想进行号码范围搜索。但是,当我使用 DataTables 插件 ColumnFilter 并尝试使用 number-range 类型的过滤器时,它不起作用。

只要我在 fromto 字段中输入任何值,它就会告诉我没有结果。但是,如果在同一列中有一行日期写成 20150626 过滤器会显示它。据我所知,问题出在我号码中间的符号 - 中。我怎样才能让过滤器忽略 - 标志?

Number-Range 过滤代码:

function fnCreateCharRangeInput() {

        th.html(_fnRangeLabelPart(0));
        var sFromId = sTableId + 'range_from_' + i;
        var from = $('<input type="text" class="number_range_filter" id="' + sFromId + '" rel="' + i + '"/>');
        th.append(from);
        th.append(_fnRangeLabelPart(1));
        var sToId = sTableId + 'range_to_' + i;
        var to = $('<input type="text" class="number_range_filter" id="' + sToId + '" rel="' + i + '"/>');
        th.append(to);
        th.append(_fnRangeLabelPart(2));
        th.wrapInner('<span class="filterColumn filter_number_range" />');
        var index = i;
        aiCustomSearch_Indexes.push(i);



        //------------start range filtering function


        /*  Custom filtering function which will filter data in column four between two values
        *   Author:     Allan Jardine, Modified by Jovan Popovic
        */
        $.fn.dataTableExt.afnFiltering.push(
            function (oSettings, aData, iDataIndex) {
                var iMin = document.getElementById(sFromId).value * 1;
                var iMax = document.getElementById(sToId).value * 1;
                var iValue = aData[index] == "-" ? 0 : aData[index] * 1;
                if (iMin == "" && iMax == "") {
                    return true;
                }
                else if (iMin == "" && iValue < iMax) {
                    return true;
                }
                else if (iMin < iValue && "" == iMax) {
                    return true;
                }
                else if (iMin < iValue && iValue < iMax) {
                    return true;
                }
                return false;
            }
        );
        //------------end range filtering function



        $('#' + sFromId + ',#' + sToId, th).keyup(function () {

            var iMin = document.getElementById(sFromId).value * 1;
            var iMax = document.getElementById(sToId).value * 1;
            if (iMin != 0 && iMax != 0 && iMin > iMax)
                return;

            oTable.fnDraw();

        });


    }

编辑:2015-06-29

或者也许有人可以帮助我让这个过滤器忽略输入格式,只需运行简单的操作,例如:

Select * from table where BIRTH_DATE between '2010' and '2011-12'

因为这样的查询在 sql 中工作正常。

最佳答案

我也遇到过这个问题:

可能有两个原因:

1) iMin 的值, iMax , iValue必须在 秒意味着在 number of milliseconds since 1970/01/01查看 这个getTime()

例如

var iMin = document.getElementById(sFromId).value

因为比较(iMin == "" && iValue < iMax)您正在使用算术运算符 ( =,<,> ),因此这三个变量的值必须是数字。

2) 请先确认一下:我猜你的日期格式是这样的 2015-06-26您必须将日期转换为这种格式 2015/06/26让它工作。不知道为什么,但在某些情况下 jquery 不接受 1970-01-011970/01/01完美运行。

看看我的函数

$.fn.dataTableExt.afnFiltering.push(
      function(oSettings, aData, iDataIndex) {
        if(chart.XminDate != '' && chart.XmaxDate !=  ''){
            minDateFilter = new Date( chart.XminDate.replace(/\-/g,'/') ).getTime();
            maxDateFilter = new Date( chart.XmaxDate.replace(/\-/g,'/') ).getTime();
            aData._date = new Date( aData[3].replace(/\-/g,'/') ).getTime();
            if (minDateFilter) {
                if (aData._date < minDateFilter) {
                    return false;
                }
            }
            if (maxDateFilter) {
                if (aData._date > maxDateFilter) {
                    return false;
                }
            }
            return true;
        }
        return true;
      }
    );

在我的函数中

 var iMin = document.getElementById(sFromId).value * 1; /*same as chart.XminDate */
 var iMax = document.getElementById(sToId).value * 1; /*same as chart.XmaxDate */
 var iValue = aData[index] == "-" ? 0 : aData[index] * 1; /*same as aData._date */

在这一行

 minDateFilter = new Date( chart.XminDate.replace(/\-/g,'/') ).getTime();

我已经替换了-/在此之后我创建了一个日期对象然后我使用了getTime()在其上运行以获得number of milliseconds since 1970/01/01

所以我想(因为我不知道您的 HTML)这会对您有所帮助。

关于php - DataTables columnFilter number-range 过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31073815/

相关文章:

mysql - SUM 加入字段

mysql - 根据实际时间或包括延迟的实际时间在数据库中查找时间

javascript - 使用 Angular.js 高级过滤数据

php - 需要在 asort 函数期间更改数组键值

mysql - Sql-ex.ru - 练习 23

JavaScript 最佳实践通过三个因素过滤数组

c - 从C中的字符串中过滤出一个字符

php - (可选)阻止谷歌分析

PHP、MYSQL 组合来自 mysqli_fetch_array 的数组

PHP随机链接不重复