logo

FullCalendar

This version is in beta. Read the release notes

Moment Plugins

Moment JS is a popular library for parsing, formatting, and manipulating dates. There is also a separate but related project called Moment Timezone which adds time zone functionality to all moment objects. FullCalendar has a connector for each of these libraries.

Moment Plugin

FullCalendar’s Moment plugin provides the following functionality:

  • Lets you use moment formatting strings for all date-formatting settings
  • Lets you convert native Date objects emitted from the API into moment objects that match the calendar’s time zone and locale
  • Lets you convert Duration objects emitted from the API into moment durations objects

Example using formatting strings:

import { Calendar } from '@fullcalendar/core';
import momentPlugin from '@fullcalendar/moment';
...
let calendar = new Calendar(calendarEl, {
  plugins: [ momentPlugin ],
  titleFormat: 'MMMM D, YYYY' // you can now use format strings
});
...

If you are using <script> tags and browser globals, you must ensure the original non-plugin moment.js dist file from the Moment site is included on your page first.

If you want to format a date range, you can group related date parts with curly brackets:

let calendar = new Calendar(calendarEl, {
  plugins: [ momentPlugin ],
  titleFormat: '{MMMM {D}}, YYYY'
  // could produce "January 5 - 7, 2018"
  // could produce "January 5 - February 31, 2018"
  // could produce "January 5, 2018 - June 9, 2019"
});

Example using date/duration conversion:

import { Calendar } from '@fullcalendar/core';
import { toMoment, toDuration } from '@fullcalendar/moment';
...
let calendar = new Calendar(calendarEl, {

  dateClick: function(arg) {
    let m = toMoment(arg.date, calendar); // calendar is required
    console.log('clicked on ' + m.format());
  },

  eventDrop: function(arg) {
    let d = toDuration(arg.delta);
    console.log('event moved ' + d.humanize());
  }
});
...

If you are using <script> tags and browser globals, you can access FullCalendarMoment.toMoment and FullCalendarMoment.toDuration.

Moment Timezone Plugin

The Moment Timezone Plugin plugin, which is separate from the basic Moment plugin, gives your calendar support for arbitrary named time zones. It provides a “named timezone implementation” for the timeZone setting.

In addition to loading the plugin, you must also load moment-timezone’s timezone data. You should consult the moment-timezone docs on this matter, but long story short, if you are using Node/Webpack, all time zone data will be automatically loaded, but if you are using script tags and browser globals, you must load a separate file.

Example using Node/Webpack:

import { Calendar } from '@fullcalendar/core';
import momentTimezonePlugin from '@fullcalendar/moment-timezone';
...
let calendar = new Calendar(calendarEl, {
  plugins: [ momentTimezonePlugin ],
  timeZone: 'Europe/Moscow'
});
...

If you are using <script> tags and browser globals, you must ensure the original non-plugin moment.js and moment-timezone.js dist files from the Moment site is included on your page first.