Sei que é um pouco tarde, mas aqui está a solução que tive que encontrar para lidar com as datas em que você quer ser independente do fuso horário. Essencialmente, envolve a conversão de tudo para UTC.
Do Javascript para o servidor :
Envie datas como valores de época com o deslocamento de fuso horário removido.
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) }
});
O servidor então recebe 1420070400000 como a época da data.
No lado do servidor, converta esse valor de época em um objeto datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
Neste ponto, a data é apenas a data / hora fornecida pelo usuário da forma como foi fornecida. Efetivamente, é UTC.
Indo na outra direção :
Quando o servidor extrai dados do banco de dados, provavelmente em UTC, obtenha a diferença como uma época (certificando-se de que ambos os objetos de data sejam locais ou UTC):
long ms = (long)utcDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)).TotalMilliseconds;
ou
long ms = (long)localDate.Subtract(new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Local)).TotalMilliseconds;
Quando o javascript recebe esse valor, crie um novo objeto de data. No entanto, este objeto de data será considerado a hora local, então você precisa compensá-lo pelo fuso horário atual:
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)
Pelo que eu sei, isso deve funcionar para qualquer fuso horário em que você precise exibir datas independentes do fuso horário.