获取从日期开始的月份的周号(从星期一开始的周)

时间:2019-03-14 13:06:29

标签: javascript date iso8601 week-number

我必须使用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 :(得分:0)

尝试这个

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))

答案 1 :(得分:0)

通过将输入日期回滚到上一个星期一,然后将星期一日期除以7,然后四舍五入,可以找到从星期一开始的一周(与ISO week date系统一致)的月份的星期数以确定日期属于哪个月。

此方法将正确处理一个月初的日期,该日期实际上落在上个月的最后一周。例如,2020-04-04是从2020-03-30(星期一)开始的一周中的星期六,因此它应该返回第5周,因为它是3月5日的一部分(而不是3月的第1周的一部分) 4月从2020-04-06(4月的第一个星期一)开始。

例如(开头的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

相关问题