gpt4 book ai didi

jqGrid 没有在 Date 对象上正确排序

转载 作者:行者123 更新时间:2023-12-03 23:52:39 25 4
gpt4 key购买 nike

我们在本地模式下使用 jqGrid,作为我们的 ajax 调用的一部分,正在修改 Json 结果,以便将日期转换为有效的 JS 日期对象。问题是这些没有正确排序。

我的 colModel 如下:

       {
name: 'reservationTime',
index: 'reservationTime',
sorttype: 'date'
}

在大多数情况下,它们是按“顺序”排列的,但第一个是从数据的中间开始的,而中间是从接近开头的记录开始的。

当我单击标题尝试对其进行升序/降序排序时,它根本没有改变。如果我对另一个工作正常的字段进行排序,然后当我按我的日期字段排序时,它将再次进行损坏的排序,但仅此而已。

最佳答案

jqGrid 不支持将 Date 作为比较操作中的 native 数据类型,因此我建议您使用两种方法作为解决方法。

1) 您可以使用sorttype 作为函数。在这种情况下,将使用 Date 参数调用该函数,并且该函数可以返回可以在比较操作中使用而不是 Date 的字符串。例如

sorttype: function (d) {
if ($.isFunction(d.toISOString)) {
return d.toISOString();
}

return ISODateString(d);
// see https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date
function ISODateString(d) {
function pad(n) { return n < 10 ? '0' + n : n; }

return d.getUTCFullYear() + '-'
+ pad(d.getUTCMonth() + 1) + '-'
+ pad(d.getUTCDate()) + 'T'
+ pad(d.getUTCHours()) + ':'
+ pad(d.getUTCMinutes()) + ':'
+ pad(d.getUTCSeconds()) + 'Z'
}
}

2) 您可以扩展 _compare jqGrid 内部使用的函数来支持 Date 类型。您可以使用我在 this old answer 中描述的技巧.如果使用_compare,代码将是

var oldFrom = $.jgrid.from;

$.jgrid.from = function (source, initalQuery) {
var result = oldFrom.call(this, source, initalQuery),
old_compare = result._compare;
result._compare = function (a, b, d) {
if (typeof a === "object" && typeof b === "object" &&
a instanceof Date && b instanceof Date) {
if (a < b) { return -d; }
if (a > b) { return d; }
return 0;
}
return _compare.call(this, a, b, d);
};
return result;
};

您可以在使用 jqGrid 之前插入代码,就像我在 the demo 上演示的那样.

更新:我发布了the pull request这解决了问题。

关于jqGrid 没有在 Date 对象上正确排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9727075/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com