Filtering jqGrid datetime columns using date picker just on date

前端 未结 2 1798
再見小時候
再見小時候 2020-11-27 22:53

I currently have an issue where I have datetime columns in a grid that are formatted to only display the date portion of the field. So the raw data looks like \"2015-04-15T1

相关标签:
2条回答
  • 2020-11-27 23:01

    Response from OlegKi on github: https://github.com/free-jqgrid/jqGrid/issues/50

    I introduced custom filtering feature in free jqGrid to allow easy implements the scenarios like youth. The answer provide an example of such implementation.

    In your case one can define new Date only \"equal\"compare operation under the short name "deq" for example and the compare operation Date only "not equal" under the short name dne. The code of customSortOperations option could be the following:

    customSortOperations: {
    deq: {
        operand: "==",
        text: "Date only \"equal\"",
        filter: function (options) {
            var p = this.p, iCol = p.iColByName[options.cmName], cm = p.colModel[iCol],
                newformat = cm.formatoptions != null && cm.formatoptions.newformat ?
                        cm.formatoptions.newformat :
                        $(this).jqGrid("getGridRes", "formatter.date.newformat"),
                srcformat = cm.formatoptions != null && cm.formatoptions.srcformat ?
                        cm.formatoptions.srcformat :
                        $(this).jqGrid("getGridRes", "formatter.date.srcformat"),
                fieldData = $.jgrid.parseDate.call(this, srcformat, options.item[options.cmName]),
                searchValue = $.jgrid.parseDate.call(this, newformat, options.searchValue);
            return fieldData.getFullYear() === searchValue.getFullYear() &&
                fieldData.getMonth() === searchValue.getMonth() &&
                fieldData.getDate() === searchValue.getDate();
        }
    },
    dne: {
        operand: "!=",
        text: "Date only \"not equal\"",
        filter: function (options) {
            var p = this.p, iCol = p.iColByName[options.cmName], cm = p.colModel[iCol],
                newformat = cm.formatoptions != null && cm.formatoptions.newformat ?
                        cm.formatoptions.newformat :
                        $(this).jqGrid("getGridRes", "formatter.date.newformat"),
                srcformat = cm.formatoptions != null && cm.formatoptions.srcformat ?
                        cm.formatoptions.srcformat :
                        $(this).jqGrid("getGridRes", "formatter.date.srcformat"),
                fieldData = $.jgrid.parseDate.call(this, srcformat, options.item[options.cmName]),
                searchValue = $.jgrid.parseDate.call(this, newformat, options.searchValue);
            return fieldData.getFullYear() !== searchValue.getFullYear() ||
                fieldData.getMonth() !== searchValue.getMonth() ||
                fieldData.getDate() !== searchValue.getDate();
        }
    }
    

    } To be able to use new "deq" and "dne" operation you should include there in sopt of searchoptions of the column with the date.

    The demo uses the above code. The input data contains 3 dates: "2015-04-15T15:31:49.357", "2015-04-15T21:15:40.123", "2015-04-15". The filtering by 15-Apr-2015 display all the three rows.

    Another demo uses practically the same code, but displays the date in full date/time format. Nevertheless the filtering works. Be carefully, that I use the latest free jqGrid sources from GitHub in the demo. It's really needed because I made some small changes in the code of parseDate to make the demo working.

    0 讨论(0)
  • 2020-11-27 23:13

    I introduced custom filtering feature in free jqGrid to allow easy implements the scenarios like youth. The answer provide an example of such implementation.

    In your case one can define new Date only "equal"compare operation under the short name "deq" for example and the compare operation Date only "not equal" under the short name dne. The code of customSortOperations option could be the following:

    customSortOperations: {
        deq: {
            operand: "==",
            text: "Date only \"equal\"",
            filter: function (options) {
                var p = this.p, iCol = p.iColByName[options.cmName], cm = p.colModel[iCol],
                    newformat = cm.formatoptions != null && cm.formatoptions.newformat ?
                            cm.formatoptions.newformat :
                            $(this).jqGrid("getGridRes", "formatter.date.newformat"),
                    srcformat = cm.formatoptions != null && cm.formatoptions.srcformat ?
                            cm.formatoptions.srcformat :
                            $(this).jqGrid("getGridRes", "formatter.date.srcformat"),
                    fieldData = $.jgrid.parseDate.call(this, srcformat, options.item[options.cmName]),
                    searchValue = $.jgrid.parseDate.call(this, newformat, options.searchValue);
                return fieldData.getFullYear() === searchValue.getFullYear() &&
                    fieldData.getMonth() === searchValue.getMonth() &&
                    fieldData.getDate() === searchValue.getDate();
            }
        },
        dne: {
            operand: "!=",
            text: "Date only \"not equal\"",
            filter: function (options) {
                var p = this.p, iCol = p.iColByName[options.cmName], cm = p.colModel[iCol],
                    newformat = cm.formatoptions != null && cm.formatoptions.newformat ?
                            cm.formatoptions.newformat :
                            $(this).jqGrid("getGridRes", "formatter.date.newformat"),
                    srcformat = cm.formatoptions != null && cm.formatoptions.srcformat ?
                            cm.formatoptions.srcformat :
                            $(this).jqGrid("getGridRes", "formatter.date.srcformat"),
                    fieldData = $.jgrid.parseDate.call(this, srcformat, options.item[options.cmName]),
                    searchValue = $.jgrid.parseDate.call(this, newformat, options.searchValue);
                return fieldData.getFullYear() !== searchValue.getFullYear() ||
                    fieldData.getMonth() !== searchValue.getMonth() ||
                    fieldData.getDate() !== searchValue.getDate();
            }
        }
    }
    

    To be able to use new "deq" and "dne" operation you should include there in sopt of searchoptions of the column with the date.

    The demo uses the above code. The input data contains 3 dates: "2015-04-15T15:31:49.357", "2015-04-15T21:15:40.123", "2015-04-15":

    var mydata = [
            { id: "10",  invdate: "2015-04-15T15:31:49.357", name: "test1",... },
            { id: "20",  invdate: "2015-04-15T21:15:40.123", name: "test2",... },
            { id: "30",  invdate: "2015-04-15", name: "test3", ...},
            ...
        ]
    

    The filtering by 15-Apr-2015 display all the three rows:

    enter image description here

    Another demo uses practically the same code, but displays the date in full date/time format. Nevertheless the filtering works. Be carefully, that I use the latest free jqGrid sources from GitHub in the demo. It's really needed because I made some small changes in the code of parseDate to make the demo working.

    enter image description here

    0 讨论(0)
提交回复
热议问题