【问题标题】:Javascript - How do i get every date in a week from a given week number and yearJavascript - 我如何从给定的周数和年份获取一周中的每个日期
【发布时间】:2020-08-27 11:10:11
【问题描述】:

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

输入

var weekNumber = "week + " " + year"; //"35 2020"

想要的输出

var weekArray = ["2020-08-24", "2020-08-25", "2020-08-26", "2020-08-27", "2020-08-28"];

【问题讨论】:

  • 这能回答你的问题吗? javascript calculate date from week number
  • @Justinas 不完全返回一周中的第一个和最后一个日期。 + 我很愚蠢,如果一周从一个月开始到另一个结束,我不知道该怎么办
  • 您有开始日期,然后您使用 momentJs 循环 7 次,并在每次迭代中将日期添加到 weekArray
  • 本网站的目的不是为您编写代码,而是帮助您编写已编写的代码。 @Justinas 的 answer linked 是您开始所需的全部内容,之后只需循环一周中的几天并格式化输出即可。之前的多个问题也涵盖了这些主题。

标签: javascript arrays date week-number


【解决方案1】:

这是一个基于以下代码构建的示例:javascript calculate date from week number

获取一周的第一个日期,然后返回一个包含 7 个元素的数组,每个元素的日期递增。

如果天数超过该月的天数,则将 temp.m 的月份加一,并将日期 temp.d 重置为 1。

function getISOWeek(w, y) {
    var simple = new Date(y, 0, 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, 0, 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",
  "Mon, 31 Aug 2020 22:00:00 GMT",
  "Tue, 01 Sep 2020 22:00:00 GMT",
  "Wed, 02 Sep 2020 22:00:00 GMT",
  "Thu, 03 Sep 2020 22:00:00 GMT",
  "Fri, 04 Sep 2020 22:00:00 GMT",
  "Sat, 05 Sep 2020 22:00:00 GMT"
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多