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

问题描述 投票:0回答:3

通过“date-fns”模块,我收到今年日期有多少周的数字。

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

相反,如果你只知道数字,你想知道如何做星期数字的第一个日期。

我想知道的方式。

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

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

javascript date date-fns
3个回答
2
投票

您可以使用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。


2
投票

我想要一个仅使用 date-fns 函数的解决方案。这就是我组合的方式:

const result = setWeek(nextMonday(new Date(year, 0, 4)), week, {
    weekStartsOn: 1,
    firstWeekContainsDate: 4,
  });

0
投票

console.log(dateFns.parse('10','I', new Date().setYear(2022)));

© www.soinside.com 2019 - 2024. All rights reserved.