Je sais que c'est un peu tard, mais voici la solution que j'ai dû trouver pour gérer les dates lorsque l'on veut être indépendant du fuseau horaire. Il s'agit essentiellement de tout convertir en UTC.
Du Javascript au serveur :
Envoyer les dates en tant que 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 d'époque.
Du côté du serveur, convertissez cette valeur d'époque en un objet de type 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 telle qu'il l'a fournie. Il s'agit en fait de l'heure UTC.
Aller dans l'autre sens :
Lorsque le serveur extrait des données de la base de données, vraisemblablement en UTC, il récupère la différence en tant qu'époque (en s'assurant que les deux objets 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, il crée un nouvel objet date. Cependant, cet objet date sera supposé être à l'heure locale, donc vous devez le décaler du 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 avez besoin d'afficher des dates indépendantes du fuseau horaire.
0 votes
Dans les questions de ce type qui sont manifestement liées à ajax, vous devez préciser où vous effectuez la conversion, et compte tenu du fait qu'il n'existe pas de norme pour la sérialisation de la date dans JSON et qu'il est possible que vous ayez affaire à MS Date munging, par exemple /Date(02020202)/, assurez-vous de le préciser également. Bonne chance.
2 votes
Vous devriez mettre en lien la réponse à laquelle vous faites référence.