Ich weiß, dass dies etwas spät ist, aber hier ist die Lösung, die ich für die Bearbeitung von Daten finden musste, wenn Sie zeitzonenunabhängig sein möchten. Im Wesentlichen geht es darum, alles in UTC zu konvertieren.
Vom Javascript zum Server :
Senden Sie Datumsangaben als Epochenwerte, wobei der Zeitzonenversatz entfernt wurde.
var d = new Date(2015,0,1) // Jan 1, 2015
// Ajax Request to server ...
$.ajax({
url: '/target',
params: { date: d.getTime() - (d.getTimezoneOffset() * 60 * 1000) }
});
Der Server erhält dann 1420070400000 als Datumsepoche.
Konvertieren Sie auf der Serverseite diesen Epochenwert in ein Datum / Uhrzeit-Objekt:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
Zu diesem Zeitpunkt ist das Datum nur das Datum / die Uhrzeit, die der Benutzer so angegeben hat, wie er es angegeben hat. Tatsächlich ist es UTC.
In die andere Richtung gehen :
Wenn der Server Daten aus der Datenbank abruft, vermutlich in UTC, erhalten Sie den Unterschied als Epoche (stellen Sie sicher, dass beide Datumsobjekte entweder lokal oder UTC sind):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
oder
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Wenn Javascript diesen Wert erhält, erstellen Sie ein neues Datumsobjekt. Dieses Datumsobjekt wird jedoch als Ortszeit angenommen, daher müssen Sie es um die aktuelle Zeitzone versetzen:
var epochValue = 1420070400000 // value pulled from server.
var utcDateVal = new Date(epochValue);
var actualDate = new Date(utcDateVal.getTime() + (utcDateVal.getTimezoneOffset() * 60 * 1000))
console.log(utcDateVal); // Wed Dec 31 2014 19:00:00 GMT-0500 (Eastern Standard Time)
console.log(actualDate); // Thu Jan 01 2015 00:00:00 GMT-0500 (Eastern Standard Time)
Soweit ich weiß, sollte dies für jede Zeitzone funktionieren, in der Sie zeitzonenunabhängige Daten anzeigen müssen.