Определить по дате какой это по счету день недели с начала месяца

Есть дата, например сегодня 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'})} с начала месяца`))

→ Ссылка