Просто чтобы показать решение без moment.js.
Названия месяцев доступны на языке браузера по умолчанию, используя toLocaleString .Чтобы получить имена месяцев с 3-го по 5-й месяц включительно, выделите их из массива, например,
/* Return array of month names for month number range in the
* browser default language.
* E.g. 3,5 returns ['March','April','May] with default language English
* Assumes Gregorian calendar, 12 months in year. If input is invalid,
* returns an empty array
*
* @param {number|string} [startMonth=1] - calendar month number
* @param {number|string} [endMonth=12] - calendar month number
* @returns {string[]} Array of month names from startMonth to endMonth inclusive.
*/
var getMonthNames = (function () {
var months = new Array(12).fill(0).map((v,i)=>
new Date(2000,i).toLocaleString(undefined,{month:'long'})
);
return function(startMonth=1, endMonth=12) {
return isNaN(+startMonth) || isNaN(+endMonth)? [] :
months.slice(--startMonth, endMonth);
}
}());
// Example
[['03', '03'], // Single month
['06'], // Month to end of year
[], // Month 1 to 12
['01', '09'], // Month 1 to month 9
['foo'] // Erroneous input
].forEach(args =>
console.log(`${args.toString()}: ${getMonthNames(...args).join(', ')}`)
);
Создание списка названий месяцев обходится немного дороже, но выполняется только один раз и требует только 12 дат, поэтому тривиально.
Требуется лучшая обработка ошибокНапример, отметка start <= end
, 0 < start < 13
, 0 < end < 13
, start
и end
- целые числа и т. д.