FullCalendarを使ってWebサイトにカレンダーを表示

こんにちは。

イベント予約を作っていたらカレンダー表示したくなりました。カレンダー表示はJavaScriptの「FullCalendar」が有名なのでそちらを使用してみました。

以下のような月カレンダーと週カレンダーを表示させます。

ライブラリ読込

以下で読み込みます。CDN (Content Delivery Network)で高速化できるそうなので使ってみます。

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fullcalendar@5.6.0/main.min.css">
<script src="https://cdn.jsdelivr.net/npm/fullcalendar@5.6.0/main.min.js"></script>

ライブラリを環境に入れる場合は以下よりダウンロードしてください。
https://github.com/fullcalendar/fullcalendar/releases

FullCalendar設定

fullcalendarのサンプル「daygrid-views」をベースに変更していきます。
ヘッダ部分を以下で設定します。月表示の「dayGridMonth」週表示の「timeGridWeek」を指定します。

      headerToolbar: {
        left: 'prev,next,today',
        center: 'title',
        right: 'dayGridMonth,timeGridWeek'
      },

「dayGridMonth」のタイトルを〇年〇月表示に、カレンダーの曜日を日本語にします。
※日本語化でも良いかもです。

      views: {
        dayGridMonth: {
          titleFormat: function (date) {
            return `${date.date.year}年 ${date.date.month + 1}月`;
          },
          dayHeaderContent: function (date) {
            let weekList = ['日', '月', '火', '水', '木', '金', '土'];
            return weekList[date.dow];
          },
        },

「timeGridWeek」の開始終了時間の設定、タイトルの設定、日にちと曜日を表示させます。

      views: {
      ....
        timeGridWeek: {
          slotMinTime: '09:00:00',
          slotMaxTime: '22:00:00',
          slotLabelFormat: { hour: 'numeric', minute: '2-digit',hour12: false },
          titleFormat: function (date) {
            const startMonth = date.start.month + 1;
            const endMonth = date.end.month + 1;

            if (startMonth === endMonth) {
              return startMonth + '月';
            } else {
              return startMonth + '月~' + endMonth + '月'; 
            }
          },
          dayHeaderFormat: function (date) {
            const day = date.date.day;
            const weekNum = date.date.marker.getDay();
            const week = ['(日)', '(月)', '(火)', '(水)', '(木)', '(金)', '(土)'][weekNum];

            return day + ' ' + week;
          }
        }
      },

カレンダーを今日~5か月後まで選択できるように設定します。

      validRange: function(nowDate) {
        var copynowDate = new Date(nowDate)
        var endDate = copynowDate.setMonth(copynowDate.getMonth() + 5)
        return {
          start: nowDate,
          end: endDate,
        };
      },

初期表示を今日にしたり、細かい設定を以下でしました。公式ドキュメントにあるので割愛します。

      initialDate: new Date(),
      navLinks: true,
      editable: true,
      dayMaxEvents: true,
      firstDay:1,
      fixedWeekCount: false,
      allDaySlot: false,

CSS設定

土日の色を変えたかったので、以下の設定をしました。あとは週表示の時間の高さを少し調整しました。

th.fc-day-sat {
  background-color: #eaf4ff;
}
th.fc-day-sun {
  background-color: #ffeaea;
}
th.fc-day-sat .fc-col-header-cell-cushion {
  color: blue;
}
th.fc-day-sun .fc-col-header-cell-cushion{
  color: red;
}

td.fc-day-sat {
  background-color: #eaf4ff;
}
td.fc-day-sun {
  background-color: #ffeaea;
}

.fc-col-header-cell-cushion {
  color: black;
}

.fc-daygrid-day-number {
  color: black;
}

td.fc-day-sat .fc-daygrid-day-number {
  color: blue;
}

td.fc-day-sun .fc-daygrid-day-number {
  color: red;
}

td.fc-timegrid-slot {
  height: 2.5em !important;
  border-bottom: 0 !important;
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)