我正在使用kendo网格来显示数据。当我在指定日期值(等于)的日期字段上过滤时,它可以正常工作。但是当我在过滤器中使用之前或之后的条件时,它会错误地过滤数据。
对日期字段进行排序也不会对其进行正确排序。任何帮助将不胜感激。仅供参考:我使用moment.js格式化dd / mm / yyyy格式的数据。
以下是包含数据的代码段:
$("#testgrid").kendoGrid({
change:onChange,
dataSource: {
data: [
{"No":"27691","ClientName":"ABC","ExpiryDate":"2015-03-14T00:00:00Z"},
{"No":"27691","Name":"DEF","ExpiryDate":"2016-03-22T00:00:00Z"},
{"No":"27691","Name":"ABC","ExpiryDate":"2015-02-28T00:00:00Z"},
{"No":"27691","Name":"ABC","ExpiryDate":"2011-07-03T00:00:00Z"},
{"No":"27691","Name":"ABC","ExpiryDate":"2015-07-31T00:00:00Z"},
{"No":"27691","Name":"ABC","ExpiryDate":null},
{"No":"27691","Name":"ABC","ExpiryDate":"2012-04-30T00:00:00Z"}
],
schema: {
model: {
fields: {
No: { type: "string" },
ExpiryDate: {
type: "date",
parse: function(inputdate) {
var dtval = moment(inputdate).format('DD/MM/YYYY');
if (dtval == "Invalid date")
return "";
else return dtval;}
},
Name: { type: "string" }
}
}
},
pageSize: 20
},
height: 550,
selectable: "single row",
allowCopy: true,
resizable: true,
groupable: true,
sortable: true,
filterable: {
mode: 'row',
extra: false,
operators: {
string: {
startswith: "Starts with",
eq: "Is equal to",
neq: "Is not equal to"
}
}
},
pageable: true,
columns: [
{ field: "No", title: "Number", filterable: { cell: { showOperators: true, operator: "contains" } } , width: 150 },
{ field: "Name", title: "Name", filterable: { cell: { showOperators: true} }, width: 150 },
{ field: "ExpiryDate", title: "Expiry Date",
format: "{0:dd/MM/yyyy}", filterable: {
cell: {
template: function (args) {
args.element.kendoDatePicker({
format: "{0:dd/MM/yyyy}"
});
}
}}
, width: 150 }
]
});`
答案 0 :(得分:1)
有趣的是,我一直在努力解决与过滤器领域相关的问题。我无法改变日期的格式......
“ExpiryDate”字段的代码部分有助于解决我的问题!
{filterable:{cell:{template:function(args){args.element.kendoDatePicker({format:“{0:dd / MM / yyyy}”}); } }}
认为为其他人强调这一点可能会有用。
答案 1 :(得分:0)
删除架构中的parse
设置可能会解决排序问题。在过滤方面,也许“问题”是您的日期是UTC,但是Kendo会在浏览器的当地时间显示它们,您需要处理时间。
我处于美国中部夏令时(CDT),因此2015-03-14T00:00:00Z
在网格中显示为13/03/2015
。如果我使用带有13/03/2015
的“等于”过滤器,那么我在网格中没有得到任何结果。同样的事情 - 没有结果 - 与14/03/2015
。如果我将datepicker模板格式更改为dd/MM/yyyy HH:mm:ss
并按等于13/03/2015 19:00:00
进行过滤,那么我会按预期获得该条目。
因此,为了使用“等于”,你必须有(a)时间组件和(b)记住本地到UTC的转换。
中的演示