Javascript-如何从给定的星期数和年份中获取一周中的每个日期

问题描述

如何从给定的星期数获得一周中的每个工作日(星期一至星期五)

输入

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"
]