Определить по дате какой это по счету день недели с начала месяца
Есть дата, например сегодня 11 августа 2024 и она выпала на воскресенье. Как определить алгоритмически, какое это по счету воскресенье в августе 2024-го? (В данном случае 2-е)
1 Пн | 2 Вт | 3 Ср | 4 Чт | 5 Пт | 6 Сб | 7 Вс | № |
---|---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 1 | |||
5 | 6 | 7 | 8 | 9 | 1 | 11 | 2 |
12 | 13 | 14 | 15 | 16 | 17 | 18 | 3 |
19 | 20 | 21 | 22 | 23 | 24 | 25 | 4 |
26 | 27 | 28 | 29 | 30 | 31 | 5 |
let date = new luxon.DateTime(2024, 8, 14);
function getWeekDayOfMonth(date) {
let day = date.day; //14
let weekday = date.weekday; //7 - в лаксоне дни недели идут по человечески пн-вс от 1 до 7
return //? должно вернуть 2
}
100% есть какая-то элементарная формула с делением на цело или с остатоком от деления на 7, но не могу сообразить.
Ответы (1 шт):
Автор решения: Алексей Р
→ Ссылка
Используйте Math.ceil(date.getDate() / 7)
- день недели здесь не важен, а важен день месяца: определяем, сколько "семидневок" (в т.ч. неполных) прошло с начала месяца до нужного числа.
function getWeekDayOfMonth(date) {
return Math.ceil(date.getDate() / 7)
}
['2024-08-04', '2024-08-11', '2024-08-18', '2024-08-25', '2024-08-27']
.forEach(d => console.log(`${d}: ${getWeekDayOfMonth(new Date(d))} ${new Date(d).toLocaleDateString('ru-RU', {weekday: 'long'})} с начала месяца`))