Javascript - 我如何从给定的周数和年份中获取一周中的每个日期
Javascript - How do i get every date in a week from a given week number and year
如何从给定的周数中获取一周中的每个工作日(周一到周五)
输入
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
获取一周的第一个日期,然后 return 一个包含 7 个元素的数组,每个元素的日期递增。
如果天数超过该月的天数,则将月加一 temp.m
并将天 temp.d
重置为一。
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"
]
如何从给定的周数中获取一周中的每个工作日(周一到周五)
输入
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
获取一周的第一个日期,然后 return 一个包含 7 个元素的数组,每个元素的日期递增。
如果天数超过该月的天数,则将月加一 temp.m
并将天 temp.d
重置为一。
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"
]