現在の週と年の数を入力する日付セットがあります。
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 日土曜日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 が増加しています。