【问题标题】:Get week number of the month from date (weeks starting on Mondays)从日期获取月份的周数(从星期一开始的周数)
【发布时间】:2019-03-14 13:06:29
【问题描述】:

我必须使用 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);

【问题讨论】:

  • @vahdet 我想要月份的周数而不是年份。
  • 什么是“月的周数”?你的意思是第1-4周取决于星期四在哪里?所以我们今天是 3 月 2 日 14 日?
  • @mplungjan 例如日期是 2020-04-05 那么周数应该是 1。
  • 为什么?那一周的星期一是上个月的acu.ac.uk/calendar/…

标签: javascript date iso8601 week-number


【解决方案1】:

试试这个

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

【讨论】:

  • 请记住使用有效日期作为参数。如果您发送 2020 年 2 月 31 日之类的内容,结果将是错误的。
【解决方案2】:

您可以通过将输入日期回滚到前一个星期一然后将星期一日期除以 7 并四舍五入来确定从星期一开始的周数(符合 ISO week date 系统)日期在月份中的哪一周。

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

例如(开头的split位只是解析日期字符串,而不是依赖new Date()来解析字符串,因为浏览器不一致不建议这样做):

const monthWeek = (s) => {
  const [y, m, d] = s.split('-'); // parse date string
  const 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

【讨论】:

    猜你喜欢
    • 2022-06-29
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多