2 votes

Pourquoi je ne peux pas obtenir le même résultat en utilisant la méthode getDay() et la méthode getUTCDay() sur l'objet Date de Javascript

Aujourd'hui nous sommes Lundi il est 00:51 am Je suis de la ville de Québec et donc je suis en GMT-0500 (UTC05:00)

Je ne sais pas pourquoi le code ci-dessous me donne deux résultats différents :

const weekday = Array('sunday', 'monday', 'tuesday', 'wednesday', 
                      'thursday', 'friday', 'saturday');

console.log('getDay() =', weekday[new Date('2019-02-18').getDay()]); 
  // getDay() = sunday

console.log('getUTCDay() =', weekday[new Date('2019-02-18').getUTCDay()]); 
  // getUTCDay() = monday

Sur le site Web MDN, on peut lire La méthode getDay() renvoie le jour de la semaine pour la date spécifiée en fonction de l'heure locale, où 0 représente le dimanche.

Et ils disent exactement la même chose pour La méthode getUTCDay() renvoie le jour de la semaine dans la date spécifiée selon le temps universel, où 0 représente le dimanche.

La seule différence est que l'un est en fonction de l'heure locale et l'autre en fonction du temps universel...

Je ne suis pas sûr de ce que je dois vérifier pour comprendre la différence. J'ai essayé les deux. en Node.js (Typescript) et dans la console Chrome DevTools (Javascript)

Dans les paramètres de mon ordinateur, le premier jour de la semaine est le dimanche...

4voto

brian-lives-outdoors Points 5245

new Date(string) utilise Date.parse() pour analyser la date.

De la Date.parse() docs :

Lorsque le décalage du fuseau horaire est absent, les formulaires de type date seule sont interprétés comme une heure UTC et les formulaires de type date-heure sont interprétés comme une heure locale.

Par conséquent, la date créée par new Date('2019-02-18') sera exactement à minuit, le 18 février 2019, à l'adresse suivante Heure UTC .

Si vous êtes dans un fuseau horaire avec un décalage négatif, cette date sera en fait le dimanche en heure locale (la ville de Québec est à GMT-0500 donc cette date est 2019-02-17:19:00:00 heure locale).

Donc si vous êtes dans un fuseau horaire avec un décalage négatif, alors .getDay() renvoie correctement 0 pour le dimanche, tandis que .getUTCDay() renvoie correctement 1 pour lundi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X