Javascript jqgrid:对日期列排序时MySQL特有的问题

Javascript jqgrid:对日期列排序时MySQL特有的问题,javascript,jquery,mysql,jqgrid,free-jqgrid,Javascript,Jquery,Mysql,Jqgrid,Free Jqgrid,在过去的几个月里,我遇到了这个问题好几次(我总是忘记这个问题的根源是什么),我决定在这里发布我的问题和答案 这是关于colModel中可排序日期列的问题;这里有一个简单的例子: { name:'my_date', index:'my_date', width:100, search: false, sort: true, sorttype: 'date', formatter: 'date', formatoptions: {srcformat: 'Y-m-d', ne

在过去的几个月里,我遇到了这个问题好几次(我总是忘记这个问题的根源是什么),我决定在这里发布我的问题和答案

这是关于
colModel
中可排序日期列的问题;这里有一个简单的例子:

{
    name:'my_date', index:'my_date', width:100, search: false, sort: true,
    sorttype: 'date', formatter: 'date', 
    formatoptions: {srcformat: 'Y-m-d', newformat: 'd.m.Y'}
}
在jqgrid中单击此列的标题对其进行排序时,我不断遇到以下错误:

未捕获类型错误:u.parseDate.call(…)。getTime不是函数

我在网上到处搜索,什么也找不到。与jqGrid一起出现此错误似乎是非常罕见的情况。
我反复检查了jqGrid中的所有内容,但我似乎没有出错


更新
既然我接受了Oleg的回答,下面是导致问题的原因和我的解决方法:


在查看了数据库中的数据之后,我在date列中看到了很多“零日期”。较旧的MySQL数据库经常使用此选项而不是NULL:“0000-00-00”或“0000-00-00:00:00”

事实证明,这就是问题的根源——jqgrid无法处理这些“零日期”。所以我所要做的就是操纵我的MySQL结果集:

CASE WHEN `my_date` = '0000-00-00' THEN ''
    ELSE `my_date`
END `my_date`

在查看了数据库中的数据之后,我在date列中看到了很多“零日期”。较旧的MySQL数据库经常使用此选项,而不是
NULL
:“0000-00-00”或“0000-00-00:00:00”

事实证明,这就是问题的根源——jqgrid无法处理这些“零日期”。所以我所要做的就是操纵我的MySQL结果集:

CASE WHEN `my_date` = '0000-00-00' THEN ''
    ELSE `my_date`
END `my_date`

谢谢你的错误报告!问题的原因如下。对于日期
0000-00-00
,内部方法
jgrid.parseDate
返回字符串
“ ;”
(请参阅):

if (ts.m === 0 && ts.y === 0 && ts.d === 0) {
    return " ";
}
在另一边

只需调用
.getTime()
以获得
$.jgrid.parseDate
的结果。我现在承诺将上述
findSortKey
代码修改为以下内容

findSortKey = function ($cell) {
    var datetime = jgrid.parseDate.call(context, dfmt, $cell);
    // datetime could be the string " "
    return datetime instanceof Date ? datetime.getTime() : 0;
};

它应该可以解决您报告的问题。请尝试新的资源。

哦,太好了!那么,当使用较新的免费jqgrid版本时,我就不必自己处理这个问题了。太棒了,谢谢你@低租金:不客气!再次感谢您报告这个问题。越多的人报告他/她发现的所有bug,我们的代码就越干净。没问题。我不确定这是否可以称为“bug”,因为“0000-00-00”通常被认为是无效日期。@low_rents:我分析了代码,发现还有一个地方可能存在同样的问题。所以我修改了代码。如果您下载了以前的版本,我建议再次刷新源代码。我希望这是bug的最终更改。好的,谢谢!我现在没有时间测试它。我在生产中使用免费的jqgrid,所以我不能经常更改版本。但我希望在接下来的几天里我能有时间升级和测试它。
findSortKey = function ($cell) {
    var datetime = jgrid.parseDate.call(context, dfmt, $cell);
    // datetime could be the string " "
    return datetime instanceof Date ? datetime.getTime() : 0;
};