通过“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 返回 2022 年 3 月 7 日星期一的日期。 date-fns 似乎假定当前星期是年份。我不知道如何指定年份,尝试:
console.log(dateFns.parse('2022-10','YYYY-II', new Date(),{
useAdditionalWeekYearTokens: true
}));
引发范围错误:格式字符串不得同时包含
YYYY
和 II
。类似地,对于“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。
我想要一个仅使用 date-fns 函数的解决方案。这就是我组合的方式:
const result = setWeek(nextMonday(new Date(year, 0, 4)), week, {
weekStartsOn: 1,
firstWeekContainsDate: 4,
});
console.log(dateFns.parse('10','I', new Date().setYear(2022)));