Breeze は、サーバーとの間でやりとりする日付時刻を操作しません。サーバーから返された日付にUTZタイムゾーン指定子を追加することを除いて、例外はありません。これは、異なるブラウザがタイムゾーン指定子を使用せずに日付を解釈するため、ブラウザ間で整合性が必要な場合にのみ実行されます。
日付のあるデータをデータベースに保存すると、使用しているdateTimeデータ型にタイムゾーンオフセットが含まれていない可能性があります。これは、データが取得されるとオフセットが失われる可能性が高く、上記のBreezeのデフォルトが起動することを意味します。これは、データベースの日付時刻のデータ型をタイムゾーンオフセット(SQLServerのdatetime2またはdatetimeoffset)と組み合わせて使用することで修正できます。
ブラウザは、現在のタイムゾーンに従って日付をフォーマットしています。
別のアプローチは、それが提供されていない場合は、任意のタイムゾーン情報を推測しないようにブリーズのDataType.parseDateFromServerを置き換えることができるということです。
breeze.DataType.parseDateFromServer = function (source) {
return new Date(Date.parse(source));
};
しかし、これは、異なるブラウザはなしDateTimeの文字列を解釈するという問題に遭遇することができますタイムゾーンが異なるようにオフセットされています...あなたはまだブラウザによっては奇妙な結果が得られるかもしれません。その場合は、上記のスニペットにブラウザ検出コードを追加する必要があります。
もう1つの方法は、moment.jsライブラリを使用して次のようにすることです。
breeze.DataType.parseDateFromServer = function (source) {
var date = moment(source);
return date.toDate();
};
どのように役立つのかよく分かりませんが、うまくいけばBreezeの動作がはっきりしています。
parseDateDromServerをオーバーライドすると修正されます。しかし、私はデータベースにタイムゾーンのオフセットを追加することが実際にはより良い解決策であると考えていますが、それはより多くのストレージスペースを必要とします:( 返信ありがとう、これは参考になりました – Sam
どこにparseDateFromServerオーバーライドを入れますか? – newman
私は試しましたすべてのフィールドをdatetime2と上記のjsソリューションとして追加しますが、クライアントは1時間前にサーバーに保存された日付より1時間遅れています(ここでは英国夏時間です)。 – johnstaveley