web-dev-qa-db-fra.com

Si javascript "(new Date ()). GetTime ()" est exécuté à partir de 2 fuseaux horaires différents

Si JavaScript (new Date()).getTime() est exécuté à partir de 2 fuseaux horaires différents simultanément, obtiendrez-vous la même valeur?

Cette valeur sera-t-elle affectée par l'heure système définie sur la machine sur laquelle le navigateur s'exécute?

39
user855

Oui, il est affecté par l'heure du système. Cependant, si l'heure locale est correcte (quel que soit le fuseau horaire défini par l'ordinateur), elle doit être la même dans n'importe quel fuseau horaire.

La norme ECMAScript dit ( §15.9.1.1 ):

"Le temps est mesuré en ECMAScript en millisecondes depuis le 1er janvier 1970 UTC."

48
Matthew Flaschen

Code:

var today = new Date();
console.log(today);
var t = today.getTime();
console.log(t);

Mon ordinateur au Royaume-Uni:

Sat Sep 21 2013 03:45:20 GMT+0100 (GMT Daylight Time)
1379731520112 

Mon VPS:

Sat, 21 Sep 2013 02:44:31 GMT
1379731471743

La différence entre les valeurs getTime est de 48 369 millisecondes (48 secondes) non synchronisées et non la différence de zone d'une heure

23
PeanutPower

Vous n'obtiendrez pas la même valeur - différence entre les navigateurs de deux clients qui récupèrent l'heure de leur système, mais si leur heure est configurée correctement, vous devriez obtenir deux fois avec une différence minimale depuis l'obtention de l'horodatage à l'aide de new Date() , vous pouvez obtenir la valeur UTC (new Date() renvoie le nombre de millisecondes écoulées depuis le 1er janvier 1970, et cela ne changera pas), qui est le temps universel et est indépendant de l'emplacement.

6
darioo

Il y aura très probablement toujours un écart entre les temps atteints entre les machines, mais (je me suis trompé avant) JavaScript Date () prend le fuseau horaire UTC par défaut.

Habituellement, lorsque le temps est essentiel, il est préférable d'utiliser simplement l'heure du serveur et d'appliquer des corrections de fuseau horaire à celle de la sortie si nécessaire.

2
BGerrissen

Vous voudrez peut-être le faire si vous voulez la même date que votre serveur sur différents fuseaux horaires:

var UTC=new Date(Date.UTC(serverYear,serverMonth-1,serverDate,0,0,0,0)); 
1
mplungjan