FullCalendarについて

らら
らら

はじめに

ひさびさに・・FullCalendarを使おうと思って・・・

jQuery版からReact、Angular、Vueに代わってた・・・javascript版?ES6

調べてみた。。。

Ver4から対応の様で、Ver3は2021にアップデートがあって現在、v3.10.5のよう・・

https://github.com/fullcalendar/fullcalendar

過去は下記から

https://github.com/fullcalendar/fullcalendar/releases

TimelineとVertical Resourceは有償です。

Ver 3.10.5

Ver 3.10.5落としてみたこんな感じ、localeは日本語だけにしてます。。長いので・・


└─fullcalendar-3.10.5
    │  CHANGELOG.txt
    │  CONTRIBUTING.txt
    │  fullcalendar.css
    │  fullcalendar.js
    │  fullcalendar.min.css
    │  fullcalendar.min.js
    │  fullcalendar.print.css
    │  fullcalendar.print.min.css
    │  gcal.js
    │  gcal.min.js
    │  LICENSE.txt
    │  locale-all.js
    │  
    ├─demos
    │  │  agenda-views.html
    │  │  background-events.html
    │  │  basic-views.html
    │  │  default.html
    │  │  external-dragging.html
    │  │  gcal.html
    │  │  json.html
    │  │  list-views.html
    │  │  locales.html
    │  │  selectable.html
    │  │  themes.html
    │  │  timezones.html
    │  │  week-numbers.html
    │  │  
    │  ├─js
    │  │      theme-chooser.js
    │  │      
    │  ├─json
    │  │      events.json
    │  │      
    │  └─php
    │          get-events.php
    │          get-timezones.php
    │          utils.php
    │          
    ├─lib
    │      jquery-ui.min.js
    │      jquery.min.js
    │      moment.min.js
    │      
    └─locale
            ja.js

demosも健在ですね。

headタグに下記を


<link rel='stylesheet' href='fullcalendar/fullcalendar.css' />
<script src='lib/jquery.min.js'></script>
<script src='lib/moment.min.js'></script>
<script src='fullcalendar/fullcalendar.js'></script>
<!-- 日本語 -->
<script src='locale/ja.js'></script>

scriptで定義します。


<script>
$(function() {
	// page is now ready, initialize the calendar...
	$('#calendar').fullCalendar({
		locale:'ja',
		// put your options and callbacks here
	})
});
</script>

表示したい箇所に下記のタグを書きます。


<div id='calendar'></div>

Ver 6.1.4

Ver 6.1.4落としてみたこんな感じ、localeは日本語だけにしてます。。長いので・・


└─fullcalendar-6.1.4
    │  LICENSE.md
    │  README.md
    │  
    ├─dist
    │      index.global.js
    │      index.global.min.js
    │      
    ├─examples
    │      background-events.html
    │      daygrid-views.html
    │      external-dragging-2cals.html
    │      external-dragging-builtin.html
    │      full-height.html
    │      list-sticky-header.html
    │      list-views.html
    │      month-view.html
    │      multimonth-view.html
    │      multiweek-view.html
    │      natural-height.html
    │      selectable.html
    │      timegrid-views.html
    │      
    └─packages
        ├─bootstrap4
        │      index.global.js
        │      index.global.min.js
        │      
        ├─bootstrap5
        │      index.global.js
        │      index.global.min.js
        │      
        ├─core
        │  │  index.global.js
        │  │  index.global.min.js
        │  │  locales-all.global.js
        │  │  locales-all.global.min.js
        │  │  
        │  └─locales
        │          ja.global.js
        │          ja.global.min.js
        │          
        ├─daygrid
        │      index.global.js
        │      index.global.min.js
        │      
        ├─google-calendar
        │      index.global.js
        │      index.global.min.js
        │      
        ├─icalendar
        │      index.global.js
        │      index.global.min.js
        │      
        ├─interaction
        │      index.global.js
        │      index.global.min.js
        │      
        ├─list
        │      index.global.js
        │      index.global.min.js
        │      
        ├─luxon1
        │      index.global.js
        │      index.global.min.js
        │      
        ├─luxon2
        │      index.global.js
        │      index.global.min.js
        │      
        ├─moment
        │      index.global.js
        │      index.global.min.js
        │      
        ├─moment-timezone
        │      index.global.js
        │      index.global.min.js
        │      
        ├─multimonth
        │      index.global.js
        │      index.global.min.js
        │      
        ├─rrule
        │      index.global.js
        │      index.global.min.js
        │      
        ├─timegrid
        │      index.global.js
        │      index.global.min.js
        │      
        └─web-component
                index.global.js
                index.global.min.js

headタグに下記を


<script src='../dist/index.global.js'></script>
<script src='../packages/core/locales/ja.global.min.js'></script>

scriptで定義します。


<script>
document.addEventListener('DOMContentLoaded', function() {
	var calendarEl = document.getElementById('calendar');
	var calendar = new FullCalendar.Calendar(calendarEl, {
		locale:'ja',
		// put your options and callbacks here
	});
	calendar.render();
});
</script>

表示したい箇所に下記のタグを書きます。


<div id='calendar'></div>

引数の違い

background-events.htmlで比較

Ver3Ver6
headerheaderToolbar
defaultDateinitialDate

ver 6系


      headerToolbar: {
        left: 'prev,next today',
        center: 'title',
        right: 'dayGridMonth,timeGridWeek,timeGridDay,listMonth'
      },
      initialDate: '2023-01-12',

ver 3系


      header: {
        left: 'prev,next today',
        center: 'title',
        right: 'month,agendaWeek,agendaDay,listMonth'
      },
      defaultDate: '2021-11-12'

defaultDate、initialDateは、初めに表示したい年月日を指定、指定しない場合は現在月日

カレンダー上の予定表示の配列


var events = [
	{
		start: "2023-02-02T10:00:00",
		end: "",
		title: "",
		url: "URL",
		color: "#xxxxx",
	},
];

navLinks true/false カレンダー内の日付クリックで日表示するかどうか

色替えは、下記にclassが準備されているのでお好みで


fc-sun 
fc-mon 
fc-tue 
fc-wed 
fc-thu 
fc-fri 
fc-sat 
fc-today
fc-holiday

例・・


.fc-sun {
    color: red;
    background-color: #fff0f0;
}

祝日を追加する

japanese-holidays.min.jsを使って、追加する。。

年度を指定して・・・こんな感じ・・Ver3用


<script src="//cdn.jsdelivr.net/gh/osamutake/japanese-holidays-js@v1.0.10/lib/japanese-holidays.min.js"></script>
$(document).ready(function() {
var news = [];
var events=[あなたのイベント];
	holset(1);
	$('#calendar').fullCalendar({
		header: {
			left: 'prev,next today',
			center: 'title',
			right: 'month,agendaWeek,agendaDay,listMonth'
		},
		locale:'ja',
		navLinks: true, // can click day/week names to navigate views
		events: news
	});
	$('.fc-prev-button').click(function(){
		holset(0);
	});
	$('.fc-next-button').click(function(){
		holset(0);
	});
function holset(first) {
	var nowdate = $('#calendar').fullCalendar('getDate');
	var get_yyyy = moment(nowdate).format('YYYY');
	var holidays = JapaneseHolidays.getHolidaysOf(get_yyyy);
	news = [];
	holidays.forEach(function(holiday) {
		var holdate = get_yyyy+'-' +('0'+ holiday.month).slice(-2) +'-'+ ('0'+ holiday.date).slice(-2);
		news.push( {start: holdate, title: holiday.name, color:""} );
	});
	news = events.concat(news);
	if(first!=1) {
		$('#calendar').fullCalendar('removeEvents');
		$("#calendar").fullCalendar('addEventSource', news);
		$('#calendar').fullCalendar('rerenderEvents');
	}
}
});

さいごに

とりあず。メモ

関連記事