Date.getDay() выдаёт неверные значения дня в неделе
Моей задачей было написать код, который выводил бы даты всех понедельников в текущем и следующем месяце без использования лишних пакетов в массив. Сразу узнал про метод .getDay(), который должен выводить номер дня недели от 0(воскресенье) до 6(суббота).
Сделал вот такой код:
let arr = new Array();
let date = new Date();
let daysInMonth = Math.round((new Date(date.getFullYear(), date.getMonth()+1, date.getDate()) - new Date(date.getFullYear(), date.getMonth(), date.getDate())) / 1000 / 3600 / 24);
for(i=1;i<=daysInMonth;i++){
let j = i;
if(i<10){j='0'+i}
a=new Date(date.getFullYear(), (date.getMonth()+1), j);
console.log(j+'.'+(date.getMonth()+1)+'.'+date.getFullYear() +' '+a.getDay())
if(a.getDay() === 1){
arr.push(j+'.'+(date.getMonth()+1)+'.'+date.getFullYear())
}
}
console.log(arr)
И ведь по сути getDay() когда его ровняют к 1 должен указывать на понедельник, верно? Даже гайды по getDay() в интернете показывали массив, сравнивания номер от метода и ячейку массива по типу:
let days = ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота' ];
При единичном использовании кода вывода номера сегодняшнего дня всё выводится нормально
console.log(new Date().getDay()) //На момент написания вопроса был вторник 24.08.2021
2
Но вывод в логи всего непотребства этого и массива в конце показал абсолютно неожиданные данные, после которых слова и мысли мои кончились
01.8.2021 3
02.8.2021 4
03.8.2021 5
04.8.2021 6
05.8.2021 0
06.8.2021 1
07.8.2021 2
08.8.2021 3
09.8.2021 4
10.8.2021 5
11.8.2021 6
12.8.2021 0
13.8.2021 1
14.8.2021 2
15.8.2021 3
16.8.2021 4
17.8.2021 5
18.8.2021 6
19.8.2021 0
20.8.2021 1
21.8.2021 2
22.8.2021 3
23.8.2021 4
24.8.2021 5 //А вот тот же день написания вопроса, но здесь уже 5, то есть пятница
25.8.2021 6
26.8.2021 0
27.8.2021 1
28.8.2021 2
29.8.2021 3
30.8.2021 4
31.8.2021 5
[ '06.8.2021', '13.8.2021', '20.8.2021', '27.8.2021' ]
Я правда не могу понять этого и прошу помочь.
Ответы (1 шт):
a=new Date(date.getFullYear(), (date.getMonth()+1), j);
^^ - ?
24.8.2021 5 //А вот тот же день написания вопроса, но здесь уже 5, то есть пятница
Эта пятница 24-го сентября, так как Вы прибавили 1 к номеру месяца.