Почему я не могу получить тот же результат, используя метод getDay () и метод getUTCDay () в объекте Date Javascript - PullRequest
0 голосов
/ 18 февраля 2019

Сегодня у нас понедельник, сейчас 00:51. Я из Квебека и поэтому в GMT-0500 (UTC-05: 00)

Я не знаю, почему приведенный ниже код дает мне 2 разных результата:

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

На веб-сайте MDN говорится, что метод getDay () возвращает день недели для указанной даты по местному времени, где 0 представляет воскресенье.

И онискажем, то же самое для метода getUTCDay () возвращает день недели в указанной дате в соответствии с универсальным временем, где 0 обозначает воскресенье.

Единственное отличие состоит в том, что одно соответствует местному времени, а другоев соответствии с универсальным временем ...

Я не уверен, что я должен проверить, чтобы понять разницу, я попробовал и в Node.js (Typescript) и в консоли ChromeDevTools (Javascript)

В настройках моего компьютера первый день недели - воскресенье ...

1 Ответ

0 голосов
/ 18 февраля 2019

new Date(string) использует Date.parse() для анализа даты.

Из Date.parse() документов :

Когда смещение часового пояса отсутствует, формы только для даты интерпретируются как время UTC, а формы даты и времени интерпретируются как местное время.

Следовательно, дата, созданная new Date('2019-02-18') будет ровно в полночь 18 февраля 2019 года в время по Гринвичу .

Если вы находитесь в часовом поясе с отрицательным смещением, тогда эта дата будет фактически воскресным по местному времени (Квебек-Сити).в GMT-0500, чтобы дата была 2019-02-17: 19: 00: 00 по местному времени).

Так, если вы находитесь в часовом поясе с отрицательным смещением, то .getDay() правильно возвращает 0 для воскресенья, а .getUTCDay() правильно возвращает 1 для понедельника.

...