web-dev-qa-db-fra.com

Comment spécifier le fuseau horaire lors de la création d'une date JavaScript?

J'ai un compte à rebours qui est programmé pour le compte à rebours à 8h le 1er janvier 2014.

J'utilise le code suivant pour définir la date:

var futureDate = new Date(2014, 0, 1, 8, 0, 0, 0);

Cela fonctionne, mais j'aimerais aller un peu plus loin et le définir sur un fuseau horaire spécifique. Dans mon cas, UTC -7.

J'ai lu cette réponse qui dit d'utiliser:

new Date(Date.UTC(year, month, day, hour, minute, second))

mais ce qui me rend confus, c'est comment j'ai défini le fuseau horaire sur UTC -7 et ce que j'ai lu en ligne me laisse encore plus confus.

Quelqu'un peut-il expliquer comment Date.UTC fonctionne et comment puis-je définir un fuseau horaire pour que mon compte à rebours effectue un compte à rebours basé sur le fuseau horaire spécifié?

Remarque: toute réponse doit être un code uniquement client.

29
L84

Quelqu'un peut-il expliquer comment Date.UTC fonctionne

Date.UTC crée une valeur temporelle pour l'année, le mois, la date, etc. fournis, sans décalage. Donc, si la machine client est configurée pour, par exemple, UTC +05: 00, alors:

var d = new Date(Date.UTC(2013, 11, 30, 12, 0, 0));

créera une date équivalente à midi le 30 décembre 2013 à Greenwich. Si vous avertissez la date, l'heure locale (en supposant +5: 00) sera imprimée, ce qui correspond à 2013-12-30T17: 00: 00 + 05: 00.

et comment puis-je définir un fuseau horaire pour que mon compte à rebours compte à rebours en fonction du fuseau horaire spécifié?

Vous ne pouvez pas définir le fuseau horaire. Toutefois, vous pouvez utiliser les valeurs UTC pour créer un objet de date, ajuster les heures et les minutes pour le décalage, puis utiliser les méthodes UTC pour obtenir les composants date et heure du compte à rebours.

par exemple.

function z(n){return (n < 10? '0' : '') + n;}

var d = new Date(Date.UTC(2012, 11, 30, 12, 0, 0));

d.setUTCHours(d.getUTCHours() - 7);

alert(d.getUTCFullYear() + '-' + z(d.getUTCMonth() + 1) + '-' + 
      z(d.getUTCDate()) + 'T' + z(d.getUTCHours()) + ':' +
      z(d.getUTCMinutes()) + ':' + z(d.getUTCSeconds()) + '-07:00'
);

// 2012-12-30T05:00:00-07:00

Si des méthodes autres que UTC sont utilisées, le décalage local affectera le résultat.

47
RobG