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