使用日期选择器just on date筛选jqGrid datetime列

使用日期选择器just on date筛选jqGrid datetime列,jqgrid,free-jqgrid,Jqgrid,Free Jqgrid,我目前有一个问题,我在网格中有datetime列,这些列的格式仅显示字段的日期部分。所以原始数据看起来像“2015-04-15T15:31:49.357”,网格列看起来像“4/15/2015” 我正在使用datepicker来支持列筛选,并且希望能够使用“eq”操作符来使用“equals”进行筛选,但仅限于日期部分。目前我没有得到任何匹配,因为时间越来越长 有可能绕过这个吗?我知道我可以处理原始数据以去除日期的时间部分,但我更愿意将这些信息保留在原始数据中,因为我还支持导出到excel,并且可能

我目前有一个问题,我在网格中有datetime列,这些列的格式仅显示字段的日期部分。所以原始数据看起来像“2015-04-15T15:31:49.357”,网格列看起来像“4/15/2015”

我正在使用datepicker来支持列筛选,并且希望能够使用“eq”操作符来使用“equals”进行筛选,但仅限于日期部分。目前我没有得到任何匹配,因为时间越来越长

有可能绕过这个吗?我知道我可以处理原始数据以去除日期的时间部分,但我更愿意将这些信息保留在原始数据中,因为我还支持导出到excel,并且可能需要时间

我当前对该列的选项有:

          formatter = "date";
          formatoptions = {srcformat: "Y-m-d", newformat: "n/j/Y"};
我尝试过各种选择,但迄今为止没有任何运气


我也在使用免费的jqgrid fork。

github上OlegKi的回应:

我在免费jqGrid中引入了自定义过滤功能,以允许轻松实现诸如youth之类的场景。答案提供了此类实施的示例

在您的情况下,可以在短名称“deq”下定义新的仅日期“相等”比较操作,例如,在短名称“dne”下定义仅比较操作日期“不相等”。CustomSortoOperations选项的代码可以是:

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();
    }
}
} 为了能够使用新的“deq”和“dne”操作,您应该将日期列的搜索选项包含在sopt中

演示使用上述代码。输入数据包含3个日期:“2015-04-15T15:31:49.357”、“2015-04-15T21:15:40.123”、“2015-04-15”。2015年4月15日之前的筛选将显示所有三行

另一个演示使用几乎相同的代码,但以完整的日期/时间格式显示日期。尽管如此,过滤仍然有效。请注意,我在演示中使用了来自GitHub的最新免费jqGrid源代码。这是非常必要的,因为我在parseDate的代码中做了一些小的更改,以使演示能够正常工作。

我在免费jqGrid中引入了这一功能,以允许轻松实现像youth这样的场景。提供此类实施的示例

在您的情况下,可以在短名称下定义新的
仅日期“相等”
比较操作,例如,在短名称下定义比较操作
仅日期“不相等”
customSortOperations
选项的代码可以是以下代码:

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();
    }
}
客户操作:{
环境保护部:{
操作数:“=”,
文本:“仅日期”等于“,
过滤器:功能(选项){
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);
返回fieldData.getFullYear()==searchValue.getFullYear()&&
fieldData.getMonth()==searchValue.getMonth()&&
fieldData.getDate()==searchValue.getDate();
}
},
dne:{
操作数:“!=”,
文本:“仅日期”不等于“,
过滤器:功能(选项){
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();
}
}
}
为了能够使用新的
“deq”
“dne”
操作,您应该在
搜索选项的
列的
sopt
中包含日期

使用上述代码。输入数据包含3个日期:
“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”,…},
...
]
2015年4月15日
过滤显示所有三行:

使用几乎相同的代码,但以完整的日期/时间格式显示日期。尽管如此,过滤仍然有效。请注意,我在演示中使用了来自GitHub的最新免费jqGrid源代码。这是非常必要的,因为我在
parseDate
的代码中做了一些,以使演示正常工作


这些CustomSortoOperations应该在哪里定义?@RicoW:请查看的代码。选项
customSortOperations
应与任何其他选项一样使用(
datatype
colModel
,…)。重要的是,这个特性只存在于我开发的fork中。