我有一个剑道网格和一个列“销售时间”显示为MM / dd / yyyy HH:mm a(2015年1月3日下午2:34)。
现在我希望能够按日期过滤,忽略时间。但默认情况下,过滤器正在查看时间,因此我使用“Is Equal To”过滤的任何日期都不会返回任何结果。
这是我用来说明问题的JSFiddle:http://jsfiddle.net/dmathisen/yx7huvxp/
还有一些代码,所以我可以发布jsfiddle链接:)
columns: [
{ field: "ModelName", title: "Model" },
{ field: "DefaultMonoCPP", title: "Mono Cost" },
{ field: "SaleTime", title: "Sale Time", format: "{0:g}" }
]
答案 0 :(得分:4)
您可以定义一个schema.parse
函数,该函数会生成一个名为SaleDate
的附加字段,该字段仅包含Date
的{{1}}部分。
然后,在显示网格中的列时,使用此选项。
类似的东西:
SaleTime
您的JSFiddle在此修改:http://jsfiddle.net/OnaBai/yx7huvxp/10/
答案 1 :(得分:3)
Telerik不支持开箱即用。请参阅here和here,这个人使用逻辑日期时间过滤器转换做了一个出色的服务器端solution。但是,就我个人而言,我总是觉得去服务器端解决客户端问题很奇怪。
所以最后我通常只将日期和时间部分分成两个不同的列,或者使用datetime而不提供过滤器选项,或者在设计中尽可能避免使用datetime字段。
我也有一个有效的数据源黑客,但是......我不建议使用它。如果您对此感兴趣,那么它就是......
基本上我的想法是复制数据列,一个是完整日期,另一个只有日期,没有时间。然后在列UI上,您希望显示完整日期,但对于基础数据源,您希望使用假日期。用户始终会看到完整日期,但过滤器将使用永恒日期。
这是demo。
RandDate
是我的完整日期。
RandDate2
是我没有时间的假部分日期。
RandDate: Mon Apr 07 2014 06:15:00 GMT-0400 (Eastern Daylight Time)
RandDate2: Mon Apr 07 2014 00:00:00 GMT-0400 (Eastern Daylight Time)
在我的列定义中,我使用部分日期作为字段,但使用模板显示完整日期
{
field: "RandDate2", //Set column source to the fake one without time
title: "Random Date",
template: "#= kendo.toString(RandDate,'g') #", //display the full date and time
}
答案 2 :(得分:0)
我使用SharePoint 2010 REST服务作为数据源,这为我完成了这项工作: ("魔术"发生在parameterMap部分)
$scope.mainGridOptions = {
...
dataSource: new kendo.data.DataSource({
type: "odata",
transport: {
read: {
url: $scope.filterParams.url,
dataType: "json"
},
parameterMap: function (options, type) {
if (options && options.filter && options.filter.filters && options.filter.filters.count != 0) {
options.filter.filters.forEach(function (f) {
if (f.operator && f.operator == 'eq' && f.value && typeof f.value.getMonth == 'function' && typeof f.value.getMonth() == 'number') {
f.operator = 'gt';
var newFilter = {
field: f.field,
operator: 'lt',
value: new Date(f.value.getFullYear(), f.value.getMonth(), f.value.getDate(), 23, 59, 59)
};
options.filter.filters.push(newFilter);
}
})
}
var params = kendo.data.transports.odata.parameterMap(options, type);
delete params.$format;
return params;
}
},
...
}

它基本上做了什么: 如果应用了某些过滤器,请检查操作员是否为“eq”。 (等于),如果值是日期。因为类型f.value 是一个对象, f.value instanceof Date 始终为true,即使您说的是 f.value = new Date(' foo'),检查值对象是否具有函数' getMonth'返回一个数字似乎是合法的,以验证f.value是一个日期。 然后该功能改变了'eq'运营商到'。 (注意f.value的时间是00:00:00!)。之后,它会创建一个新的过滤器' lt'运算符,相同的日期但是另一个时间(在我的情况下是23:59:59)并将其推送到filters数组。 因为sharepoint在这种格式中遇到了一些问题'属性,我们删除它。
所以' 日期GT 19.10.2015 00:00:00和日期lt 19:10:2015 23:59:59 '与' date eq 19.10.2015 '
基本相同