カレンダー

const today = new Date();
const year = today.getFullYear();
const month = today.getMonth();

function getCalenderHead() {
	const dates = [];

	const lastdate = new Date(year, month, 0).getDate(); // 前月末日
	const week = new Date(year, month, 1).getDay(); // 今月初日の曜日

	for (let i = 0; i < week; i++) {
		dates.unshift({
			date: lastdate - i,
			isToday: false,
			isDisabled: true,
		});
	}

	return dates;
}

function getCalenderBody() {
	const dates = [];
	const lastday = new Date(year, month + 1, 0).getDate(); // 今月末日

	for (let i = 1; i < lastday + 1; i++) {
		dates.push({ date: i, isToday: false, isDisabled: false });
	}

	dates[today.getDate() - 1].isToday = true; // 当日フラグをtrueに

	return dates;
}

function getCalenderFoot() {
	const dates = [];
	const lastday = new Date(year, month + 1, 0).getDay(); // 今月末日の曜日

	for (let i = 1; i < 7 - lastday; i++) {
		dates.push({ date: i, isToday: false, isDisabled: false });
	}

	return dates;
}

function createCalender() {
	const dates = [
		...this.getCalenderHead(),
		...this.getCalenderBody(),
		...this.getCalenderFoot(),
	];
	const week = [];
	const weekCount = dates.length / 7;

	for (let i = 0; i < weekCount; i++) {
		week.push(dates.splice(0, 7));
	}

	return week;
}
const dates = createCalender();
console.log(dates);