日期“;“少但不空”;免费jqgrid中的自定义搜索

日期“;“少但不空”;免费jqgrid中的自定义搜索,jqgrid,free-jqgrid,Jqgrid,Free Jqgrid,我使用免费的jqgrid 4.15.4来显示数据。在那里,我需要使用无日期但不为空的过滤器搜索日期列,但它没有正确过滤。结果,它给了我一个大于搜索日期的日期 以下代码用于日期列中的自定义筛选器: customSortOperations: { dlne: { operand: "<!=''", text: "Date less but not empty", filter:function (

我使用免费的jqgrid 4.15.4来显示数据。在那里,我需要使用
无日期但不为空的
过滤器搜索日期列,但它没有正确过滤。结果,它给了我一个大于搜索日期的日期

以下代码用于日期列中的自定义筛选器:

customSortOperations: {

dlne: {
                operand: "<!=''",
                text: "Date less but not empty",
                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);
                    var retFData = convertD(fieldData), t = new Date(retFData);
                    if ((retFData.getFullYear() < searchValue.getFullYear()) && (retFData.getMonth() < searchValue.getMonth()) && (retFData.getDate() < searchValue.getDate())) {
                        return true
                    }
                }
           },
}

我采纳了他的想法,做了一些改变,但似乎没有用。因此,请求社区在此方面提供帮助。

dlne的代码可以固定为,例如:

dlne:{

Operator:“您能为演示提供一些重现问题的测试数据吗?输入数据的确切格式可能很重要。例如,您可以获得一些我之前创建的JSFIDLE演示,并对其进行修改,以便人们可以看到问题。此外,我不理解行
var retFData=convertD的含义(fieldData),t=新日期(retFData);
如果使用
srcformat
newformat
格式化程序的选项:“日期”
对应输入和显示数据格式,那么
fieldData
searchValue
将已经是
Date
对象。请参阅代码和演示。Hello@Oleg,(此处)[是带有一些测试数据的js fiddle演示。在这里你会看到一些日期列是空的。我想要的是创建一个自定义筛选器,它能够选择行而不选择空行。这里的运算符没有日期,但不是空的。Hello@Oleg,虽然上面的答案适用于其他列,但后面有一列是日期ing格式:“/Date(1547145000000)/”。因此,结果网格失败。您能告诉我如何更改该日期列的格式吗?另外,$(this).jqGrid(“getGridRes”,“formatter.Date.srcformat”)给出的日期格式是d-m-Y格式,我希望在dd/mm/yy(例如:27/04/2019)中使用该格式@Chandan:你为什么不像我问你的那样,用你的测试数据发布演示?你不是发布了我的原始演示。你能修改我的演示并包含你的测试数据吗,其中也包括一些非空日期和空日期?另外,使用与你的数据格式相对应的
srcformat
,这一点很重要。试试看,这对我们有什么好处es
格式选项:{srcformat:“d/m/Y”,newformat:“d/m/Y”}
。格式为
“/Date(1547145000000)的输入数据/“
将被自动检测并忽略处理
srcformat
。如果我正确理解您,那么您似乎还没有看到我之前发布的小提琴。这是JSFIDLE,其中包含的测试数据几乎与我在项目中使用的数据相似。格式选项
formattoptions:{srcformat:“d/m/Y”,newformat:“d/m/Y”}
在我的原始项目中,但我猜是这个格式引起了问题。@Chandan:您的上一个演示使用了
格式选项:{srcformat:“d/m/Y”,newformat:“d/m/Y”}
,但输入数据与
srcformat
不对应:请参见
“2007-09-06”
“2007-10-03”
与日期混合,如
“12/10/2007”
。您应该使用一种格式,对应于
srcformat
。此外,如果使用另一种格式的数据(如“/Date(1547145000000)/”)导致问题的原因是为什么不在演示中包含数据?只需发布演示,它可以用来重现您遇到的问题。
function convertD(dateField) {
var date = new Date(dateField),
    mnth = ("0" + (date.getMonth() + 1)).slice(-2),
    day = ("0" + date.getDate()).slice(-2);
// year= (date.getFullYear())

var retVal = [day, mnth, date.getFullYear()].join("/");
return retVal;
}