Нужна помощь с dayjs
Всем привет подскажите пожалуйста как получить с помощью dayjs массив месяцев начиная с заданной даты (например 01/03/2021). На выходе хочу получить массив вида:
["март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь", "январь", "февраль"]
Ответы (2 шт):
Добился вот такого решения. Но может кто знает решение поизящней испульзуя доп. плагины dayjs.
const startDate = dayjs('2021-03-01').month();
const allMonths = dayjs.months();
const oldMonth = allMonths.splice(startDate, allMonths.length);
const featureMonth = allMonths.slice(0, oldMonth.length);
const result = [...oldMonth, ...featureMonth];
oldMonth: ["март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь"]
featureMonth: ["январь", "февраль"]
result: ["март", "апрель", "май", "июнь", "июль", "август", "сентябрь", "октябрь", "ноябрь", "декабрь", "январь", "февраль"]
Без сторонних библиотек:
const foo = (dateStr, locale = 'ru-RU') => {
const month = dateStr.split(/\D+/)[1] - 1, // получение из строки даты порядкового номера месяца, с отсчетом от нуля (0: январь, 1: февраль, ...)
date = new Date(0),
tlsParams = [locale, { month: 'long' }];
return Array.from({ length: 12 }, (_, i) => { // инициализатор массива на каждой своей итерации меняет месяц объекта даты (последовательно инкрементируя начальный месяц все бóльшим значением), и возвращает строковое представление даты в "заказанном" формате (только полное название месяца)
date.setMonth(+month + i); // этот метод корректно учитывает переполнение (значения аргумента >11 допустимы по стандарту ES, и обрабатываются в соответствии с естественной логикой)
return date.toLocaleDateString(...tlsParams);
});
};
console.log(foo('2021-03-01'));
Вторым параметром можно указать локаль, если понадобятся названия месяцев на другом языке (конечно же, указанная локаль должна поддерживаться средой выполнения JS).
Данный простой алгоритм можно применять и с библиотеками для работы с датами - при том условии, что используемая библиотека должна так же правильно учитывать переполнение при изменении компонентов даты (как это делает стандартный объект Date).