Flatpickr

4.6.13 · active · verified Sun Apr 19

Flatpickr is a lightweight, dependency-free JavaScript datetime picker library, currently stable at version 4.6.13. It offers a rich set of features for date and time input, including range selections, multiple date selections, time-only pickers, and highly customizable date disabling logic. The library maintains an active release cadence, frequently publishing patch versions to address bugs and introduce minor enhancements, as seen in the recent 4.6.x releases. Unlike many alternatives, Flatpickr avoids heavy dependencies like jQuery or Moment.js, contributing to smaller bundle sizes. It provides 51 locales, 8 themes, and a plugin architecture, with official and community-maintained wrappers for popular frameworks like React, Angular, and Vue. Its primary differentiator is providing extensive functionality and a polished user experience without sacrificing performance or introducing external bloat.

Common errors

Warnings

Install

Imports

Quickstart

This quickstart demonstrates how to initialize two Flatpickr instances: a datetime picker with a French locale and a date range picker. It dynamically creates input elements, imports necessary CSS and locale, and configures each instance with common options like `enableTime`, `dateFormat`, `altInput` for user-friendly display, and event hooks.

import flatpickr from 'flatpickr';
import 'flatpickr/dist/flatpickr.min.css';
import { French } from 'flatpickr/dist/l10n/fr';

document.addEventListener('DOMContentLoaded', () => {
  const dateInput = document.createElement('input');
  dateInput.setAttribute('type', 'text');
  dateInput.setAttribute('placeholder', 'Select a date...');
  dateInput.classList.add('my-datepicker');
  document.body.appendChild(dateInput);

  flatpickr('.my-datepicker', {
    locale: French,
    enableTime: true,
    dateFormat: 'Y-m-d H:i',
    altInput: true,
    altFormat: 'F j, Y at H:i',
    minDate: 'today',
    onReady: (selectedDates, dateStr, instance) => {
      console.log('Flatpickr is ready!', dateStr);
    },
  });

  const rangeInput = document.createElement('input');
  rangeInput.setAttribute('type', 'text');
  rangeInput.setAttribute('placeholder', 'Select date range...');
  rangeInput.classList.add('my-range-picker');
  document.body.appendChild(rangeInput);

  flatpickr('.my-range-picker', {
    mode: 'range',
    dateFormat: 'Y-m-d',
    altInput: true,
    altFormat: 'Y-m-d',
    onClose: (selectedDates, dateStr, instance) => {
      if (selectedDates.length === 2) {
        console.log('Selected range:', dateStr);
      }
    },
  });
});

view raw JSON →