Je sais que c'est un peu tard, mais voici la solution que j'ai dû trouver pour gérer les dates lorsque vous voulez être indépendant du fuseau horaire. Il s'agit essentiellement de tout convertir en UTC.
Du Javascript au serveur :
Envoyez les dates sous forme de valeurs d'époque avec le décalage du fuseau horaire supprimé.
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) }
});
Le serveur reçoit alors 1420070400000 comme date.
Du côté du serveur, convertissez cette valeur d'époque en objet datetime:
DateTime d = new DateTime(1970, 1, 1, 0, 0, 0).AddMilliseconds(epoch);
À ce stade, la date est simplement la date / heure fournie par l'utilisateur tel qu'il l'a fournie. En fait, c'est UTC.
Aller dans l'autre sens :
Lorsque le serveur extrait des données de la base de données, probablement en UTC, obtenez la différence sous forme d'époque (en vous assurant que les deux objets de date sont soit locaux, soit 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;
Lorsque javascript reçoit cette valeur, créez un nouvel objet de date. Cependant, cet objet de date sera supposé l'heure locale, vous devez donc le décaler par le fuseau horaire actuel:
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)
Pour autant que je sache, cela devrait fonctionner pour tout fuseau horaire où vous devez afficher des dates indépendantes du fuseau horaire.