Получить номер недели месяца от даты (недели, начиная с понедельника) - PullRequest
1 голос
/ 14 марта 2019

Я должен найти номер недели месяца с указанной даты, используя JavaScript.Начало недели - понедельник.

Я попробовал код ниже, но не получил точного результата.

function getWeekNumber(date) {
  var monthStartDate = new Date(new Date().getFullYear(), new Date().getMonth(), 1);
  monthStartDate = new Date(monthStartDate);
  var day = monthStartDate.getDay();
  date = new Date(date);
  var date = date.getDate();

  let weekNumber = Math.ceil((date + (day)) / 7);
  return (weekNumber == 0) ? 1 : weekNumber;
}

var week = getWeekNumber('2020-04-04');
console.log(week);

Ответы [ 2 ]

0 голосов
/ 14 марта 2019

Вы можете найти номер недели месяца для недель, начинающихся с понедельника (в соответствии с системой Дата недели 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
0 голосов
/ 14 марта 2019

Попробуйте это

function getWeek(date) {
  let monthStart = new Date(date);
  monthStart.setDate(0);
  let offset = (monthStart.getDay() + 1) % 7 - 1; // -1 is for a week starting on Monday
  return Math.ceil((date.getDate() + offset) / 7);
}
getWeek(new Date(2019, 2, 14))
...