Filtern von jqGrid-Datumsspalten mithilfe der Datumsauswahl nur am Datum

Ich habe derzeit ein Problem, bei dem ich Datum / Uhrzeit-Spalten in einem Raster habe, die so formatiert sind, dass nur der Datumsteil des Feldes angezeigt wird. Die Rohdaten sehen also wie “2015-04-15T15: 31: 49.357” aus und die Rasterspalte sieht wie “4/15/2015” aus.

Ich verwende einen Datepicker, um die Spaltenfilterung zu unterstützen, und möchte den Operator “eq” verwenden, um mit “equals” zu filtern, aber nur mit dem Datumsteil. Momentan bekomme ich keine Matches, weil die Zeit im Weg ist.

Ist es möglich, das zu umgehen? Ich weiß, dass ich die rohen Daten manipulieren kann, um den Zeitabschnitt des Datums abzustreifen, aber ich würde es vorziehen, diese Information in den rohen Daten zu behalten, da ich auch das Exportieren nach Excel unterstütze und die Zeit könnte benötigt werden.

Meine aktuellen Optionen für die Spalte sind:

formatter = "date"; formatoptions = {srcformat: "Ymd", newformat: "n/j/Y"}; 

Ich habe verschiedene Möglichkeiten ausprobiert, aber bis jetzt hatte ich kein Glück.

Ich benutze auch die free-jqgrid-Gabel.

Ich habe die benutzerdefinierte Filterfunktion in jqGrid eingeführt, um die Szenarien wie Jugend einfach zu implementieren. Die Antwort liefert ein Beispiel für eine solche Implementierung.

In Ihrem Fall kann man unter dem Kurznamen "deq" beispielsweise eine neue Date only "equal" vergleichen und unter dem Kurznamen dne die Vergleichsoperation Date only "not equal" . Der Code der customSortOperations Option könnte folgendermaßen customSortOperations :

 customSortOperations: { deq: { operand: "==", text: "Date only \"equal\"", 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); return fieldData.getFullYear() === searchValue.getFullYear() && fieldData.getMonth() === searchValue.getMonth() && fieldData.getDate() === searchValue.getDate(); } }, dne: { operand: "!=", text: "Date only \"not equal\"", 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); return fieldData.getFullYear() !== searchValue.getFullYear() || fieldData.getMonth() !== searchValue.getMonth() || fieldData.getDate() !== searchValue.getDate(); } } } 

Um neue "deq" und "dne" verwenden zu können, sollten Sie dort die searchoptions der Spalte mit dem Datum searchoptions .

Die Demo verwendet den obigen Code. Die Eingabedaten enthalten 3 Daten: "2015-04-15T15:31:49.357" , "2015-04-15T21:15:40.123" , "2015-04-15" :

 var mydata = [ { id: "10", invdate: "2015-04-15T15:31:49.357", name: "test1",... }, { id: "20", invdate: "2015-04-15T21:15:40.123", name: "test2",... }, { id: "30", invdate: "2015-04-15", name: "test3", ...}, ... ] 

Die Filterung bis zum 15-Apr-2015 zeigt alle drei Zeilen an:

Bildbeschreibung hier eingeben

Eine andere Demo verwendet praktisch denselben Code, zeigt aber das Datum im vollständigen Datum / Uhrzeit-Format an. Trotzdem funktioniert die Filterung. Seien Sie vorsichtig, dass ich die neuesten freien jqGrid-Quellen von GitHub in der Demo verwende. Es ist wirklich notwendig, weil ich einige kleine Änderungen im Code von parseDate , um die Demo funktionierend zu machen.

Bildbeschreibung hier eingeben

Antwort von OlegKi auf GitHub: https://github.com/free-jqgrid/jqGrid/issues/50

Ich habe die benutzerdefinierte Filterfunktion in jqGrid eingeführt, um die Szenarien wie Jugend einfach zu implementieren. Die Antwort liefert ein Beispiel für eine solche Implementierung.

In Ihrem Fall kann man unter dem Kurznamen “deq” beispielsweise eine neue Date only “equal” -Vergleichsoperation definieren und unter dem Kurznamen dne die Vergleichsoperation Date only “not equal”. Der Code der customSortOperations-Option könnte folgendermaßen aussehen:

 customSortOperations: { deq: { operand: "==", text: "Date only \"equal\"", 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); return fieldData.getFullYear() === searchValue.getFullYear() && fieldData.getMonth() === searchValue.getMonth() && fieldData.getDate() === searchValue.getDate(); } }, dne: { operand: "!=", text: "Date only \"not equal\"", 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); return fieldData.getFullYear() !== searchValue.getFullYear() || fieldData.getMonth() !== searchValue.getMonth() || fieldData.getDate() !== searchValue.getDate(); } } 

} Um neue “deq” – und “dne” -Operationen verwenden zu können, sollten Sie dort in die Suchoptionen der Spalte mit dem Datum aufnehmen.

Die Demo verwendet den obigen Code. Die Eingabedaten enthalten 3 Daten: “2015-04-15T15: 31: 49.357”, “2015-04-15T21: 15: 40.123”, “2015-04-15”. Die Filterung bis zum 15.04.2015 zeigt alle drei Zeilen an.

Eine andere Demo verwendet praktisch denselben Code, zeigt aber das Datum im vollständigen Datum / Uhrzeit-Format an. Trotzdem funktioniert die Filterung. Seien Sie vorsichtig, dass ich die neuesten freien jqGrid-Quellen von GitHub in der Demo verwende. Es ist wirklich notwendig, weil ich einige kleine Änderungen im Code von parseDate vorgenommen habe, um die Demo funktionierend zu machen.