我有一个日期集,我用当前周和年份的数字填充它:
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函数的工作原理就像如果它不是星期一,那么显示从今天到星期日和从下周从星期一到星期日的日期。但是这个函数的错误是当月份改变时它不会推送。所以对于4周console.log(dates)显示:
- [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日星期六
2021 16:22:46 GMT+0200(中欧夏令时),周日8月22日
2021 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日星期六
2021 16:22:47 GMT+0200(中欧夏令时),周日8月29日
2021 16:22:47 GMT+0200(中欧夏令时)]
- []
正如你所看到的,3周后,月份将改为九月,我认为这就是为什么它会变成一个空数组。我不知道是否有必要,但无论如何,这里是我使用的其他函数:
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在每次点击按钮时都会增加。
2条答案
按热度按时间6tr1vspr1#
您的问题在这里:
当你到了8月底,下一个星期日是9月5日,一周的第一天是8月30日,所以 diff 是-25,在测试中:
一个修复方法是获取到下一个星期天的天数,并迭代那么多天,例如。
如果提供的日期是星期六,上面的函数返回一个星期天的数组。如果提供的日期是星期天,它返回一个下一个星期一到星期天的数组,等等。
如果你想获取多个星期的日期,添加第二个参数,比如 weeks,默认值为1,然后在 while 循环之前将
(weeks - 1) * 7
添加到 count。首先测试 weeks 以确保它是1或更大(用负数开始递减的 while 循环不是一个好主意)。或者你可以继续添加日期直到星期天:
c3frrgcw2#
以下是移动到下个月时增加日期的示例: