3

現在、フィールドの日付部分のみを表示するようにフォーマットされているグリッドに日時列があるという問題があります。したがって、生データは「2015-04-15T15:31:49.357」のようになり、グリッド列は「4/15/2015」のようになります。

列のフィルタリングをサポートするために日付ピッカーを使用していますが、「eq」演算子を使用して「equals」を使用してフィルタリングできるようにしたいと考えていますが、日付部分だけです。現在、時間が邪魔になっているため、一致するものはありません。

これを回避することは可能ですか?生データを操作して日付の時刻部分を取り除くことができることはわかっていますが、Excel へのエクスポートもサポートしており、時間が必要になる可能性があるため、生データにその情報を保持したいと考えています。

列の現在のオプションは次のとおりです。

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

さまざまなオプションを試しましたが、これまでのところ運がありません。

free-jqgrid フォークも使用しています。

4

2 に答える 2

4

無料の jqGrid にカスタム フィルタリング機能を導入して、若者のようなシナリオを簡単に実装できるようにしました。答えは、そのような実装の例を提供します。

あなたの場合、たとえばDate only "equal"短い名前で新しい比較操作を定義し、短い名前で比較操作を定義できます。オプションのコードは次のようになります。"deq"Date only "not equal"dnecustomSortOperations

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();
        }
    }
}

"deq"newおよびoperationを使用できるようにするには、日付のある列の of に含める"dne"必要があります。soptsearchoptions

デモでは上記のコードを使用します。入力データには、 、 、 の 3 つの日付が含まれて"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", ...},
        ...
    ]

15-Apr-20153 つの行すべてを表示することによるフィルタリング:

ここに画像の説明を入力

別のデモでは実質的に同じコードが使用されていますが、日付が完全な日付/時刻形式で表示されます。それにもかかわらず、フィルタリングは機能します。デモでは GitHub から最新の無料の jqGrid ソースを使用していることに注意してください。デモを機能させるためにコードに小さな変更を加えたので、これは本当に必要です。parseDate

ここに画像の説明を入力

于 2015-04-16T13:55:55.460 に答える