Вы можете найти номер недели месяца для недель, начинающихся с понедельника (в соответствии с системой Дата недели ISO ), свернув введенную дату с предыдущим понедельником и затем разделив дату понедельника на 7 и округление, чтобы определить, в какую неделю месяца попадает дата.
Этот подход будет правильно обрабатывать даты в начале месяца, которые фактически выпадают на последней неделе предыдущего месяца. Например, 2020-04-04 - это суббота недели, начинающейся с 2020-03-30 (понедельник), поэтому она должна возвращать неделю 5, поскольку она является частью 5-й недели марта (а не частью 1-й недели Апрель, который начинается 2020-04-06, первый понедельник апреля).
Например (бит split
в начале предназначен только для разбора строки даты, а не полагается на new Date()
для разбора строки, поскольку это не рекомендуется из-за несоответствий браузера):
const monthWeek = (s) => {
let [y, m, d] = s.split('-'); // parse date string
let date = new Date(y, m - 1, d); // create date object
date.setDate(d - ((date.getDay() + 6) % 7)); // adjust date to previous Monday
return Math.ceil(date.getDate() / 7); // return week number of the month
}
console.log(monthWeek('2020-04-04'));
// 5
console.log(monthWeek('2020-04-07'));
// 1