Как вывести дату, ближайшую к сегодняшней, учитывая условия
Есть информация по каждому дню недели, из которой следует, что некоторые дни не активны. Не могу понять, как найти ближайший активный день. То есть если сегодня 27.05.2020(среда), то с учетом данных ближайшим активным будет суббота(30.05.2020). Пыталась использовать momentjs.
const currentDate = new Date();
const weekdayNumCurrent = moment(currentDate).format("dddd");
const weekdaysData = [{
day_number: 1,
is_active: false
},
{
day_number: 2,
is_active: true
},
{
day_number: 3,
is_active: false
},
{
day_number: 4,
is_active: false
},
{
day_number: 5,
is_active: false
},
{
day_number: 6,
is_active: true
},
{
day_number: 7,
is_active: false
},
];
const activeDays = weekdaysData.filter((el) => el.is_active === true);
console.log(activeDays);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>
Ответы (1 шт):
Автор решения: Денис Степанов
→ Ссылка
Можно разбить массив дней по текущему, склеить в обратном порядке, найти индекс и прибавить к текущей дате. Но скорее всего можно, как-нибудь покрасивше.
const currentDate = new Date();
const weekdayNumCurrent = moment(currentDate).format("E");
const weekdaysData = [{
day_number: 1,
is_active: false
},
{
day_number: 2,
is_active: false
},
{
day_number: 3,
is_active: true
},
{
day_number: 4,
is_active: false
},
{
day_number: 5,
is_active: false
},
{
day_number: 6,
is_active: true
},
{
day_number: 7,
is_active: false
},
];
const nextActiveDay = 1 + weekdaysData.slice(weekdayNumCurrent)
.concat(weekdaysData.slice(0, weekdayNumCurrent))
.findIndex((el) => el.is_active === true);
console.log(moment(currentDate).add(nextActiveDay, 'd').format("dddd, MMMM Do YYYY"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.26.0/moment.min.js"></script>