" /> ">
  1. TOP
  2. コムセント 技術情報
  3. 日時入力UIの救世主「flatpickr」を使ってみた話

日時入力UIの救世主「flatpickr」を使ってみた話

「どうしてコレもこのブラウザは対応してないんですか!?」
プログラマやコーダーはこのようなことは日常茶飯事だと思うのですが、先日どうにも解せない“ソレ”にぶち当たりまして。
input type="datetime-local"にはブラウザのコントロールUIがあるのに、どうしてinput type="time"には用意されていないんですか!?!?
などと思っていたら、正確にはdatetime-localのコントロールUIにはinput type="date"と同じものを使用…つまり時間専用のコントロールUI自体が、そのブラウザには実装されていなかったのです。
そんなのありかよ~~~と、しょげていたら自社の先駆者に「flatpickr」という存在を教えてもらいました。

flatpickrとは?

ブラウザに依存せずに、日付や時間の入力UIを提供できるJavaScriptライブラリです。
日付・時間だけでなく、年月指定ができる軽量なjsライブラリで、見た目のカスタマイズも複数のテーマから選択できる優れものです。
スマートフォンなどでも問題なく使用できます。

早速実装してみる

まずはデフォルト設定されているカレンダーを表示させてみます。

head内にcssとjsを読み込んで

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
<script src="https://cdn.jsdelivr.net/npm/flatpickr"></script>

bodyタグ内に

<input type="text" id="dateSelector">

scriptタグ内に

flatpickr("#dateSelector");

これを書くだけで…

いとも簡単にカレンダーフォームを実装できました。

日本語化する

head内に日本語化するjsの記述を書き加えて、

<script src="https://cdn.jsdelivr.net/npm/flatpickr/dist/l10n/ja.js"></script>

scriptタグ内に書いていたものを下記のように書き換えます。

flatpickr("#dateSelector", {
 locale: 'ja',
});

そうすると…

簡単すぎる…!

時間セレクターを表示させてみる

一度新しいフォームを定義して、

<input type="text" id="timeSelector">

scriptタグ内に

flatpickr("#timeSelector", {
  locale: 'ja',
  enableTime: true, //時間セレクターの有効化
  noCalendar: true, //カレンダーセレクターを非表示
  dateFormat: 'H:i', //入力ボックス内での表示方法の定義
  minuteIncrement: 1, //分入力のステップ量
});

こんな風に記述してあげると

すごい…!!本当に簡単すぎるしどのブラウザでも使える…!!
こちらはデータとしてはテキストになるので、表示されている「12:00」というテキストデータで取得されます。

テーマを変えてみる

読み込むcssを変更すると、デフォルト以外に7種のテーマを使用することができます。

<!--デフォルト-->
 <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css">
 <!--dark-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/dark.css">
 <!--material_blue-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/material_blue.css">
 <!--material_green-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/material_green.css">
 <!--material_red-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/material_red.css">
 <!--material_orange-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/material_orange.css">
 <!--airbnb-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/airbnb.css">
 <!--confetti-->
 <link rel="stylesheet" type="text/css" href="https://npmcdn.com/flatpickr/dist/themes/confetti.css">

各テーマの見た目は、公式のドキュメントで確認できます。

さいごに

いかがでしたか?
公式の最終更新が2022年で注意が必要ですが、ブラウザごとの挙動に振り回されるよりも、flatpickrのようなライブラリを活用することで、ユーザーにも開発者にも優しいUIを実現できます。
ぜひ導入を検討してみてくださいね。

公式ドキュメント

flatpickr公式ドキュメント

エンジニア / O.H

主にHTML、CSS、JavaScriptを使用してフロントエンドのコーディングを担当。プロジェクトによってはGoogle Apps Scriptを用いた開発や、CodeIgniterやVue.jsのフレームワークを使用したバックエンドも請け負う。

このメンバーの記事一覧へ

おすすめ記事