Странное поведение объекта Date в JavaScript

Ребята, столкнулся с проблемой при работе с датами в JS. Вот мой код:

let дата = new Date('2023-09-15');
let месяц = дата.getMonth();
let день = дата.getDate() - 3;
let год = дата.getFullYear();
console.log(`${месяц}/${день}/${год}`);

Я ожидал увидеть ‘8/12/2023’, но получил ‘7/12/2023’. Почему месяц изменился? Как это исправить?

Заранее спасибо за помощь!

Вот еще один нюанс: когда вычитаешь дни из даты, JS автоматом корректирует месяц, если выходим за его пределы. Тут 15 - 3 = 12 сентября, всё ок. Но если б было ‘2023-09-01’ и минус 3 дня, получилось бы 29 августа. Календарная магия! Чтоб избежать таких сюрпризов, можно юзать библиотеки типа moment.js или date-fns - они удобнее для манипуляций с датами.

Причина в том, что метод getMonth() возвращает месяц от 0 до 11, где 0 - январь. Поэтому сентябрь (9-й месяц) выдает 8. Чтобы исправить, просто добавь 1 к результату getMonth(). А еще лучше использовать toLocaleDateString() для форматирования даты, так проще и надежнее. Удачи с кодом!