Прежде всего, я собираюсь уточнить, что этот вопрос не является дубликатом Разница в месяцах между двумя датами в javascript или разница в месяцах javascript
Мой вопрос касается именно получения месяцев между двумя датами, а не количества месяцев.
Итак, если date1 – 01.11.2022 (мм/дд/гггг), а date2 – 20.02.2023, он должен вывести массив месяцев, включая месяц date1 и date2, например ["November", "December", "January", "February"]. Мне нужно знать, как вернуть фактические месяцы между двумя датами, а не количество месяцев. Может кто-нибудь объяснить, как это сделать?
@ThomasSablik Этот вопрос специфичен для моментов, мой вопрос касается только JavaScript.
Логика точно такая же, как и в принятом ответе. Дубликат содержит ответы с momentjs и date-fns, но ту же логику можно использовать с нативными объектами Date.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Сообщение, связанное с вопросом, уже является хорошим началом.
Может быть, подумайте о том, как бы вы это сделали, когда хотите записать результаты на лист бумаги.
Когда мы знаем месяц, с которого начинается, как индекс [0...11], мы можем считать оттуда и добавлять названия месяцев из массива:
const xmas = new Date("December 25, 1999 23:15:30");
const summer = new Date("June 21, 2003 23:15:30");
function monthsBetween(dstart, dend) {
const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let result = [];
let current = dstart.getMonth();
let end = (dend.getFullYear() - dstart.getFullYear()) * 12 + dend.getMonth();
for (;current <= end; current += 1) {
result.push(monthNames[current % 12]);
}
return result;
}
console.info(monthsBetween(xmas, summer)); // [December, January, February..., December, January, ...., June (multiple years)
console.info(monthsBetween(xmas, xmas)); // ["December"]
В вашем примере с 01.11.2022 по 20.02.2023 current будет считаться от 10 (ноябрь, индексируется от 0) до 13 (1: февраль, индексируется от 0 + 1 год = разница в 12 месяцев)
Это отличный ответ, большое спасибо! Кроме того, извиняюсь за то, что не включил воспроизводимый пример, поскольку я не на своем основном компьютере с кодом, но должен был задать этот вопрос как можно раньше, но, тем не менее, вы его получили! :D
Вы можете перебирать даты от начала до конца, собирая названия месяцев по мере продвижения.
Начало и конец должны быть объектами Date, то, как вы конвертируете их из меток времени, таких как «01.11.2022», является отдельной проблемой и должно быть рассмотрено на предыдущем шаге.
/* Get month names from start date to end date
* @param {Date} start - date to start from
* @param {Date} end - date to end at
* @param {string} lang - language for month names
* @returns {string[]} month names from start to end inclusive
*/
function getMonthNames(start = new Date(), end = new Date(), lang = 'en') {
let d = new Date(start.getFullYear(), start.getMonth());
let months = [];
while (d <= end) {
months.push(d.toLocaleString(lang,{month:'long'}));
d.setMonth(d.getMonth() + 1);
}
return months;
}
let start = new Date(2022, 10, 1); // 01 Nov 2022
let end = new Date(2023, 1, 20); // 20 Feb 2023
console.info(getMonthNames(start, end))
Отвечает ли это на ваш вопрос? Список всех месяцев, которые существуют между двумя датами, включая случай, когда числовая разница между датами составляет менее 30 дней