1
var shippedFromDt = new Date(2013, 09, 09);
var query = EntityQuery.from('Shipments')
            .where(breeze.Predicate.create("ShipmentDate", ">=", shippedFromDt))
            .orderByDesc("ID")

出荷日が「2013 年 10 月 9 日」であるテーブルのレコードがあります。しかし、上記のクエリを実行すると、レコードが取得されません。日付を「2013 年 10 月 8 日」に変更すると、クエリはレコードを返します。">=" クエリ演算子 & も使用しているため、入力日が「2013 年 10 月 9 日」の場合、クエリはデータを返すはずです。出荷されたFromDtには時間情報も含まれているため、テーブルの列には日付のみが格納されているため、これが発生しているかどうかはわかりません。時間、分、秒のパラメーターに0の値を渡してDateオブジェクトを作成しようとしましたが、これは役に立ちません。

Javascript の月のインデックスは 0 から始まるため、10 月には 09 が使用されます。

4

1 に答える 1

1

これはおそらくタイムゾーンの問題です。基本的に、クライアントで作成する日付はすべて、クライアント ブラウザーのタイムゾーンにあるものとして定義されます。比較すると、データベース サーバーに保存されている日付は、DateTimeOffset または DateTime2 データ型でない限り、タイムゾーンが指定されていない状態で定義されているため、UTC オフセットが 0 (つまり GMT) であると見なされる場合があります。したがって、最善の策は、クライアントのタイムゾーン オフセットによってクライアントの時刻を調整し、GMT 時刻に変換することです。このようなもの。(下の行は確認していないので、符号がずれている可能性があります)。

var adjustedDate = new Date(yourDate.getTime() - (yourDate.getTimezoneOffset() * 60000));

SOで議論された同様の問題

もう 1 つの方法は、日付を「Z」指定子を使用して文字列として定義し、日付を UTC O オフセットにすることを示してから、文字列を日付に解析することです。

最後のアプローチは、データベースで DateTime2 または DateTimeOffset データ型を使用することです。ここで、すべてのデータのタイムゾーン オフセットはクライアントのものと同じです。

于 2013-10-09T16:31:09.560 に答える