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 шт):

Автор решения: Igor
a=new Date(date.getFullYear(), (date.getMonth()+1), j);
                                               ^^ - ?

24.8.2021    5 //А вот тот же день написания вопроса, но здесь уже 5, то есть пятница

Эта пятница 24-го сентября, так как Вы прибавили 1 к номеру месяца.

→ Ссылка