import { ref } from 'vue' import { DateType } from '../types' /** * 選択された年月日のカレンダー情報を生成する関数 * */ export const createCalendar = (yearValue: number, monthValue: number) => { // 1週目のカレンダー配列 const weekOneDays = ref([]) // 最終週のカレンダー配列 const lastWeekDays = ref([]) // 中間のカレンダー配列 const midWeekDays = ref([]) // この月のカレンダー配列 const thisMonthCalenderDays = ref([]) // 月初の曜日番号を取得する const isMonthStartDayOfWeekNumber = new Date( yearValue, monthValue, 1 ).getDay() // 1週目の配列を生成する for (let i = 0; i < 7; i++) { if (i >= isMonthStartDayOfWeekNumber) { weekOneDays.value.push({ year: String(yearValue), month: String(monthValue), day: String(i - (isMonthStartDayOfWeekNumber - 1)) }) } else { weekOneDays.value.push weekOneDays.value.push({ year: ' ', month: ' ', day: ' ' }) } } // 月末の曜日番号を取得する const isMonthEndDayOfWeekNumber = new Date( yearValue, monthValue + 1, 0 ).getDay() // 月末の日を取得する const isMonthEndDate = new Date(yearValue, monthValue + 1, 0).getDate() // 最終週の配列を生成する for (let i = 0; i < 7; i++) { if (i <= isMonthEndDayOfWeekNumber) { lastWeekDays.value.unshift({ year: String(yearValue), month: String(monthValue), day: String(isMonthEndDate - i) }) } else { lastWeekDays.value.push({ year: ' ', month: ' ', day: ' ' }) } } // 1週目と最終週以外の日付を格納する for ( let i = Number(weekOneDays.value[6].day) + 1; i < Number(lastWeekDays.value[0].day); i++ ) { midWeekDays.value.push({ year: String(yearValue), month: String(monthValue), day: String(i) }) } // この月のカレンダー配列 thisMonthCalenderDays.value = [ ...weekOneDays.value, ...midWeekDays.value, ...lastWeekDays.value ] return thisMonthCalenderDays.value }