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

问题描述 投票:1回答:2

我必须使用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);
javascript date iso8601 week-number
2个回答
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))

0
投票

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

这种方法将适当地处理一个月初的日期,该日期实际上落在上个月的最后一周。例如,2020-04-04是从2020-03-30(星期一)开始的一周中的星期六,所以它应该返回第5周,因为它是3月的第5周的一部分(并且不是第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
© www.soinside.com 2019 - 2024. All rights reserved.