问题描述
如何从给定的星期数获得一周中的每个工作日(星期一至星期五)
输入
var weekNumber = "week + " " + year"; //"35 2020"
想要的输出
var weekArray = ["2020-08-24","2020-08-25","2020-08-26","2020-08-27","2020-08-28"];
解决方法
以下是建立在Example Image
之上的示例获取星期的第一个日期,然后返回包含7个元素的数组,并递增每个元素的日期。
如果天数大于一个月中的天数,则在月temp.m
上加1,并将天temp.d
重置为1。
function getISOWeek(w,y) {
var simple = new Date(y,1 + (w - 1) * 7);
var dow = simple.getDay();
var ISOweekStart = simple;
if (dow <= 4)
ISOweekStart.setDate(simple.getDate() - simple.getDay() + 1);
else
ISOweekStart.setDate(simple.getDate() + 8 - simple.getDay());
const temp = {
d: ISOweekStart.getDate(),m: ISOweekStart.getMonth(),y: ISOweekStart.getFullYear(),}
//console.log(ISOweekStart)
const numDaysInMonth = new Date(temp.y,temp.m + 1,0).getDate()
return Array.from({length: 7},_ => {
if (temp.d > numDaysInMonth){
temp.m +=1;
temp.d = 1;
// not needed,Date(2020,12,1) == Date(2021,1)
/*if (temp.m >= 12){
temp.m = 0
temp.y +=1
}*/
}
return new Date(temp.y,temp.m,temp.d++).toUTCString()
});
}
// var weekNumber = "week + " " + year"; //"35 2020"
const weekNumber = "53 2020";
const weekYearArr = weekNumber.split(" ").map(n => parseInt(n))
const weekOut = getISOWeek(...weekYearArr)
console.log(weekOut);
输入:“ 35 2020”
输出:
[
"Sun,23 Aug 2020 22:00:00 GMT","Mon,24 Aug 2020 22:00:00 GMT","Tue,25 Aug 2020 22:00:00 GMT","Wed,26 Aug 2020 22:00:00 GMT","Thu,27 Aug 2020 22:00:00 GMT","Fri,28 Aug 2020 22:00:00 GMT","Sat,29 Aug 2020 22:00:00 GMT"
]
输入:“ 36 2020”
输出:
[
"Sun,30 Aug 2020 22:00:00 GMT",31 Aug 2020 22:00:00 GMT",01 Sep 2020 22:00:00 GMT",02 Sep 2020 22:00:00 GMT",03 Sep 2020 22:00:00 GMT",04 Sep 2020 22:00:00 GMT",05 Sep 2020 22:00:00 GMT"
]