Breeze manipuliert die Datumsangaben nicht zum und vom Server in irgendeiner Weise EXCEPT, um einen UTZ-Zeitzonenspezifizierer zu jedem Datum hinzuzufügen, das vom Server zurückgegeben wird, die noch keinen haben. Dies geschieht nur deshalb, weil verschiedene Browser Datumsangaben ohne Zeitzonenbezeichner anders interpretieren und wir Konsistenz zwischen Browsern wünschen.
Die Ursache Ihrer Probleme ist wahrscheinlich, dass beim Speichern Ihrer Daten mit Datumsangaben in der Datenbank der von Ihnen verwendete Datentyp dateTime KEINEN Zeitzonenoffset enthält. Dies bedeutet, dass Sie den Offset wahrscheinlich "verlieren", wenn die Daten abgerufen werden und der oben erwähnte Breeze-Standard eintritt. Dies kann korrigiert werden, indem ein Datenbankdatumszeittyp mit einem Zeitzonenoffset (datetime2 oder datetimeoffset im SQLServer) verwendet wird.
Beachten Sie, dass Ihr Browser Datumsangaben entsprechend der aktuellen Zeitzone formatiert.
Ein weiterer Ansatz ist, dass Sie Breeze DataType.parseDateFromServer ersetzen kann nicht info jede Zeitzone zu schließen, wenn es nicht vorgesehen ist:
breeze.DataType.parseDateFromServer = function (source) {
return new Date(Date.parse(source));
};
Dies kann jedoch in das Problem führen, dass verschiedene Browser Datetime Strings interpretieren, ohne eine Zeitzone versetzt anders ... So können Sie immer noch seltsame Ergebnisse abhängig vom Browser erhalten. In diesem Fall müssen Sie dem obigen Code einige Browser-Erkennungscodes hinzufügen.
Eine weitere Alternative besteht in der Verwendung der Bibliothek moment.js.
Nicht sicher, wie hilfreich das ist, aber hoffentlich ist das Verhalten von Breeze klarer.
Überschreiben parseDateDromServer repariert es. Aber ich glaube, das Hinzufügen der Zeitzone Offset zur Datenbank wäre in der Tat eine bessere Lösung, obwohl es mehr Speicherplatz belegt :( Vielen Dank für die Antwort, das war hilfreich. – Sam
Wo sollte ich die parseDateFromServer überschreiben? – newman
Ich habe es versucht addieren alle Felder als datetime2 und die js Lösungen oben, aber der Kunde ist immer noch 1 Stunde vor dem auf dem Server gespeicherten Datum um 1 Stunde (wir sind UK DST hier) – johnstaveley