Wiem, że jest trochę za późno, ale oto rozwiązanie, które musiałem wymyślić, aby zarządzać datami, kiedy chcesz być niezależny od strefy czasowej. Zasadniczo polega na konwersji wszystkiego na UTC.
Od JavaScript do serwera :
Wysyłaj daty jako wartości epok z usuniętym przesunięciem strefy czasowej.
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) }
});
Serwer otrzymuje wtedy 1420070400000 jako epokę daty.
Po stronie serwera przekonwertuj tę wartość epoki na obiekt datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
W tym momencie data jest po prostu datą / godziną podaną przez użytkownika, tak jak ją podał. W rzeczywistości jest to UTC.
Idąc w drugą stronę :
Kiedy serwer pobiera dane z bazy danych, przypuszczalnie w UTC, uzyskaj różnicę jako epokę (upewniając się, że oba obiekty daty są lokalne lub UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
lub
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Gdy javascript otrzyma tę wartość, utwórz nowy obiekt daty. Jednak ten obiekt daty zostanie przyjęty jako czas lokalny, więc musisz przesunąć go o aktualną strefę czasową:
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)
O ile wiem, powinno to działać w każdej strefie czasowej, w której musisz wyświetlać daty niezależne od strefy czasowej.