Convertir l'objet Date Javascript pour le fuseau horaire PST

Je dois choisir une date ultérieure à partir du calendrier, supposons que la date que je sélectionne soit 10/14/2014 , maintenant, ce que je veux, c'est d'envoyer la date avec le temps au serveur, de sorte que, à la fin du serveur, il arrive toujours à 6 heures du matin PST fuseau horaire et le format de date devrait être UTC.

Ce que je fais est

targetDate = new Date($("#calendar").val()); targetDate = targetDate.toUTCString(); targetDate = targetDate.addHours(14);

Je comprends bien que le fuseau horaire PST est de -8: 00, donc j'ai ajouté 14 heures à l'heure UTC afin que le temps soit de 6h00 PST

Le problème auquel je suis confronté est qu'il ne me permet pas d'ajouter 14 heures puisque l'objet a déjà été converti en chaîne.

AddHours est la fonction personnalisée que je dois ajouter les heures dans le temps donné.

Si j'écris

targetDate = new Date($("#calendar").val()); targetDate = targetDate.addHours(14); targetDate = targetDate.toUTCString();

Alors cela fonctionne bien, mais dans ce cas, le temps est toujours différent lorsque la demande provient de différents fuseaux horaires.

Toute aide est appréciée.

Suggérez-vous de consulter DateJS http://code.google.com/p/datejs/ ou http://www.datejs.com/ . Gère la PDT pour vous.

Voici une alternative pour vous:

Utilisation: Date.UTC (année, mois, jour, heures, minutes, secondes, ms)

Exemple: pour le 1 janv. 2013 6h00 PST

Var date = nouvelle Date (Date.UTC (2013, 0, 1, 14, 0, 0))
Console.log (date.toUTCString ());

Estampes: "Tue, 01 Jan 2013 14:00:00 GMT"

Tu as dit:

Je comprends bien que le fuseau horaire PST est de -8: 00, donc j'ai ajouté 14 heures à l'heure UTC afin que le temps soit de 6h00 PST

Uh – no. Cela vous mènera le lendemain. Si vous vouliez rester dans PST, vous soustrayez 8 heures de l'heure UTC. -8:00 signifie qu'il est 8 heures après l' UTC.

Cependant, le fuseau horaire du Pacifique n'est pas seulement corrigé à la TVP. Il alterne entre PST (-8) et PDT (-7) pour l'heure d'été. Afin de déterminer le décalage correct, vous devez utiliser une bibliothèque qui implémente la base de données TZDB. Reportez-vous à cette réponse en double ici .

La seule façon de le faire sans une bibliothèque chic est d' être dans le fuseau horaire pacifique. JavaScript convertira les dates UTC vers le fuseau horaire local pour l'affichage, et il utilisera le décalage correct. Mais il ne connaît que le fuseau horaire local . Si l'heure du Pacifique n'est pas votre fuseau horaire local, vous devez utiliser une bibliothèque.

 var date = new Date(); var utcDate = new Date(date.toUTCString()); utcDate.setHours(utcDate.getHours()-8); var usDate = new Date(utcDate); console.log(usDate); 

Principale observation:

Je dois choisir une date ultérieure du calendrier, supposons que la date que je sélectionne soit 14/10/2014,

Comme il n'y a pas de 14ème mois, je suppose que vous voulez dire le 14 octobre 2014. Comme il s'agit d'un forum international, il est préférable d'utiliser un format sans ambiguïté.

… et le format de date devrait être UTC

UTC n'est pas un format, c'est un temps standard.

Je pense que tu es confus. Si vous voulez dire 2014-10-14T06: 00: 00-08: 00 en UTC, l'équivalent est 2014-10-14T14: 00: 00Z.

Vous utilisez la méthode toUTCString , mais dépend de l'implémentation, de sorte que vous obtiendrez des résultats différents dans différents navigateurs. Vous voulez probablement la méthode toISOString , mais ES5 et n'est pas implémenté dans tous les navigateurs.

Vous devez fournir quelques exemples de la façon dont vous souhaitez que les temps soient convertis, sinon vous pouvez également obtenir la date au format ISO8601 et ajouter «T14: 00: 00Z».

Je crois que vous pouvez simplement ajouter 14 heures avant de vous convertir en UTC.

Ou vous pouvez créer une nouvelle objet Date hors de la chaîne UTC:

 var date = new Date(); date = date.addHours(14); var dateUTC = new Date(date.toUTCString());