当你知道星期几时,如何找出一周的开始日期

When you know what week it is, how to find out the start date of the week

通过 'date-fns' 模块,我收到了今年日期是多少周的数字。

const current = '2022-03-10'
const weekNumber = getWeek(current, 1) // 11

相反,如果你只知道数字,想知道星期几的第一个日期怎么办。

我想知道的方式

const weekNumber = 11;
const weekOfstartDate = anyFunc(weekNumber) // '2022-03-07'

你知道这个解决方案的答案吗?

您可以使用 I 令牌:

var dateFns = require("date-fns");
console.log(dateFns.parse('10','I', new Date()));

npm.runkit.com returns 的日期是 2022 年 3 月 7 日星期一。似乎 date-fns 假设当前周是年份。我不知道如何指定年份,尝试:

console.log(dateFns.parse('2022-10','YYYY-II', new Date(),{
  useAdditionalWeekYearTokens: true
}));

抛出范围错误:格式字符串不能同时包含 YYYYII。同样对于“2022W10”和标记“YYYY'W'II”,它表示 Y 和 I 标记不能采用相同的格式字符串。

做同样事情的函数是:

// Returns the first day (Monday) of the specified week
// Year defaults to the current local calendar year
function getISOWeek(w, y = new Date().getFullYear()) {
  let d = new Date(y, 0, 4);
  d.setDate(d.getDate() - (d.getDay() || 7) + 1 + 7*(w - 1));
  return d;
}

// Mon Mar 14 2022
console.log(getISOWeek(11).toString());
// Mon Jan 02 2023
console.log(getISOWeek(1,2023).toString());
// Mon Dec 28 2026
console.log(getISOWeek(53,2026).toString());

一个强大的函数应该验证输入,使得周数是 1 到 53,并且 53 只允许有 53 周的年份。