我有一个日期集,我用当前周数和年份填充它:
dateSets(week, year) {
let fistDayOfTheWeek = '';
if(this.currentWeekNumber === this.getWeekNumber(new Date())) {
fistDayOfTheWeek = new Date();
} else {
fistDayOfTheWeek = this.getDateOfWeek(week, year);
}
let sunday = new Date(fistDayOfTheWeek);
sunday.setDate(sunday.getDate() - sunday.getDay() + 7);
const dates = [];
const diff = sunday.getDate() - fistDayOfTheWeek.getDate();
for (let i = 0; i <= diff; i++) {
const upDate = new Date();
upDate.setDate(fistDayOfTheWeek.getDate() + i);
dates.push(upDate);
}
console.log(dates)
return dates;
},
因此,显然我的 dateSet 函数的工作方式就像不是星期一,然后显示从今天到星期日以及从下周从星期一到星期日的日期。但是这个功能的问题是当月份更改时它不推送。因此,console.log(dates) 显示 4 周:
[2021 年 8 月 10 日星期二 16:22:43 GMT+0200(中欧夏令时间),2021 年 8 月 11 日星期三 16:22:43 GMT+0200(中欧夏令时间),2021 年 8 月 12 日星期四 16:22:43 GMT+ 0200(中欧夏令时间),2021 年 8 月 13 日星期五 16:22:43 GMT+0200(中欧夏令时间),2021 年 8 月 14 日星期六 16:22:43 GMT+0200(中欧夏令时间),2021 年 8 月 15 日星期日16:22:43 GMT+0200(中欧夏令时间)]
[2021 年 8 月 16 日星期一 16:22:46 GMT+0200(中欧夏令时间),
2021 年 8 月 17 日星期二 16:22:46 GMT+0200(中欧夏令时间),2021 年 8 月 18 日星期三 16:22:46 GMT+ 0200(中欧夏令时间),2021 年 8 月 19 日星期四 16:22:46 GMT+0200(中欧夏令时间),2021 年 8 月 20 日星期五 16:22:46 GMT+0200(中欧夏令时间),
2021 年8 月 21 日星期六16:22:46 GMT+0200(中欧夏令时间),
2021 年 8 月 22 日星期日 16:22:46 GMT+0200(中欧夏令时间)][2021 年 8 月 23 日星期一 16:22:47 GMT+0200(中欧夏令时间),
2021 年 8 月 24 日星期二 16:22:47 GMT+0200(中欧夏令时间),2021 年 8 月 25 日星期三 16:22:47 GMT+ 0200(中欧夏令时间),2021 年 8 月 26 日星期四 16:22:47 GMT+0200(中欧夏令时间),2021 年 8 月 27 日星期五 16:22:47 GMT+0200(中欧夏令时间),
2021 年8 月 28 日星期六16:22:47 GMT+0200(中欧夏令时间),2021 年 8 月 29 日
星期日 16:22:47 GMT+0200(中欧夏令时间)][]
如您所见,3 周后,月份将更改为 9 月,我认为这就是为什么它会出现一个空数组的原因。我不知道是否有必要,但无论如何这里是我使用的其他功能:
getDateOfWeek(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());
return ISOweekStart;
}
getWeekNumber(date) {
const temp_date = new Date(date.valueOf());
const dayn = (date.getDay() + 6) % 7;
temp_date.setDate(temp_date.getDate() - dayn + 3);
const firstThursday = temp_date.valueOf();
temp_date.setMonth(0, 1);
if (temp_date.getDay() !== 4)
{
temp_date.setMonth(0, 1 + ((4 - temp_date.getDay()) + 7) % 7);
}
return 1 + Math.ceil((firstThursday - temp_date) / 604800000);
},
PS:每次单击按钮时,currentWeekNumber 都会增加。