So che è un po 'tardi, ma ecco la soluzione che ho dovuto trovare per gestire le date quando vuoi essere indipendente dal fuso orario. Essenzialmente si tratta di convertire tutto in UTC.
Da Javascript al server :
Invia le date come valori di epoca con la differenza di fuso orario rimossa.
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) }
});
Il server quindi riceve 1420070400000 come data epoch.
Sul lato Server, converti quel valore epoch in un oggetto datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
A questo punto la data è solo la data / ora fornita dall'utente così come l'ha fornita. Effettivamente è UTC.
Andando dall'altra parte :
Quando il server estrae i dati dal database, presumibilmente in UTC, ottieni la differenza come epoca (assicurandoti che entrambi gli oggetti data siano locali o UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
o
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Quando javascript riceve questo valore, crea un nuovo oggetto data. Tuttavia, questo oggetto data verrà assunto come ora locale, quindi è necessario compensarlo con il fuso orario corrente:
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)
Per quanto ne so, questo dovrebbe funzionare per qualsiasi fuso orario in cui è necessario visualizzare date indipendenti dal fuso orario.