【jQuery】Datepickerの実装方法★コピペで実装

プログラミング

(この記事は2022年7月5日が最終更新日です。)

自己紹介

この記事の作成はKazuが行っています。
本業ではエンジニアとして働きつつWebサービス開発を行っております。
副業でWebエンジニア・デザインを行っています。

エンジニアに欠かせないのが学習という名の自己投資です。

いろいろな学習方法があって正直どれを選べばよいのか悩みますよね・・・

いくつもある学習方法の中から私がオススメするのはUdemy!!

購入したコースが満足いく内容でなければ返金もしてくれるので損はありません。

Udemyを試してみる!

本記事ではカレンダーUIを用いて日付、時間を入力したい場合に便利なjQueryのDatepickerの実装方法を解説していきます。

サンプルコードはコピペで使用できるので初心者でも挫折することなく実装できるかと思います。

最後まで、よろしくお願いします。

今回実装するのはこんな感じのカレンダーです。

日付の入力項目をおしたらポップアップで表示される感じです。

jQueryのDatepickerの実装方法

ソースコード

それでは早速コードを見ていきましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>datatimepicker</title>
    <!-- CSS only -->
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/jquery.datetimepicker.css">
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
</head>
<body>
    <p>年月日(datapicker): <input type="text" id="input1" /></p>
    <p>年月日(datatimepicker): <input type="text" id="input2" /></p>
</body>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/build/jquery.datetimepicker.full.min.js"></script>

<script>
	$(function() {
		$.datepicker.setDefaults($.datepicker.regional["ja"]);
		$("#input1").datepicker();
	});
</script>
<script type="text/javascript">
    $(function () {
      $("#input2").datetimepicker();
    });
</script>
</html>

プログラミング初心者の方はこのコードをコピーして適当なテキストにはりつけ、拡張子を.htmlで保存してください。

そうすればそのhtmlをダブルクリックするとサンプルコードを動かすことができます。

解説

サンプルコードの中で重要になってくるのは以下の点です。

  • jQuery読み込み
  • datepickerの関数呼び出し
  • css読み込み

jQuery読み込み

jQueryを読み込んでいる部分は以下の部分です。

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="text/javascript" src="https://code.jquery.com/ui/1.12.0/jquery-ui.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/build/jquery.datetimepicker.full.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1/i18n/jquery.ui.datepicker-ja.min.js"></script>

読み込みはhtmlのどこで行ってもいいですが、サイトの読み込みを早くしたいならbodyタグの終了タグ前に記述するのがセオリーです。

jQueryって何ぞやって方は、javascriptのライブラリなので便利なjavascriptなんだなーと解釈してもらえればOKです。詳しく知らいたい方はググってみてください。

datepickerの関数呼び出し

ここから肝心のカレンダーの実装になります。

実装部分は以下のコード

<script>
	$(function() {
		$.datepicker.setDefaults($.datepicker.regional["ja"]);
		$("#input1").datepicker();
	});
</script>

ここでinput1というidの要素がクリックされた際にdiatepickerを呼び出すような記述が行われています。

setDefaultsで指定しているのは言語設定で、日本語に設定しています。この記述がないと英語表記になります。

合わせてinputタグにidを指定してあげます。

<p>年月日(datapicker): <input type="text" id="input1" /></p>

css読み込み

ここまでの作業でカレンダーの実装はできていますが、このままだと見た目が悪くなってしまいます。

最後にcssを読み込みを行っていきます。

    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/jquery.datetimepicker.css">
    <link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">

head内でjQueryのcssを読み込んであげます。

オプション指定

jQueryは非常に便利でオプションが存在します。

今回は以下の機能を実装するためのオプションを紹介します。

  • 選択できる日付を制限したい
  • 指定した日付を選択できないくしたい
  • 時刻も入力できるようにしたい
  • 選択できる時刻を制限したい
  • 時刻だけ表示したい、日付だけ表示したい

選択できる日付を制限したい

選択できる日付を制限したい場合は以下のようにDatepickerメソッドに引数を持たせます。

<script>
	$(function() {
		$.datepicker.setDefaults($.datepicker.regional["ja"]);
		$("#input1").datepicker({
            minDate: new Date(),
            maxDate: '+3d'
        });
	});
</script>

mixDateとmaxDateを指定してあげることで選択できる日付を制限することができます。

指定した日付を選択できないくしたい

選択できる日付の制限で、範囲選択でなく指定した日付を制限したい場合があるかと思います。

そのような場合はbeforeShowDayを使用し以下のように実装します。

<script>
	$(function() {
		$.datepicker.setDefaults($.datepicker.regional["ja"]);
		$("#input1").datepicker({
            beforeShowDay: function (date) {
                if (date.getDay() == 0) {
                    // 日曜日
                    return [false, 'ui-state-disabled'];
                } 
                if(date.getMonth()+1 == 7 && date.getDate() == 8){
                    //特定日
                    return [false, 'test'];
                }
                    // 平日
                    return [true, ''];
            }
        });
	});
</script>

getDay()やgetMonth()の詳細は以下のサイトをご参照ください。

実装はこのような感じになります。

日曜日と指定している7月8日が選択でなくできました。

時刻も入力できるようにしたい

日付だけでなく時刻も入力できるようにしたい場合があるかと思います。そのような場合は以下のコード処理で実装出来ます。

<script type="text/javascript">
    $(function () {
      $("#input2").datetimepicker();
    });
</script>

datepickerと同じようにjsとcssの読み込みが別に必要です。※すでに一番上のコードに記載済み

<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/jquery.datetimepicker.css">
<script src="https://cdn.jsdelivr.net/npm/jquery-datetimepicker@2.5.20/build/jquery.datetimepicker.full.min.js"></script>

選択できる時刻を制限したい

選択できる時間を制限したい場合は以下のようにdatetimepickerメソッドを修正します。

ドロップダウンに表示したい時間を列挙する形になります。

<script type="text/javascript">
    $(function () {
      $("#input2").datetimepicker({
        allowTimes:[
        '14:00', '15:00', '17:00', '19:00'
            ]
      });
    });
</script>

時刻だけ表示したい、日付だけ表示したい

datetimepickerで使用可能なオプションでtimepicker、datepickerというものがあります。

このオプションをfalse指定することで時刻だけ、日付だけの表示が実現可能です。

<script type="text/javascript">
    $(function () {
        $(".Date").datetimepicker({
            timepicker: false
        });
    });
</script>
<script type="text/javascript">
    $(function () {
        $(".Time").datetimepicker({
            datepicker: false
        });
    });
</script>

実装はこのような感じになります。

おわりに

どうでしたでしょうか?

jQueryのdatepickerはオプションも豊富でかなり使い勝手が良いのでなないでしょうか?

ぜひご活用ください!!

繰り返しになりますが、システムエンジニアとして生きていく上で勉強は欠かせません!
書籍を購入して勉強するのもいいですが専門書は高いし、質問もできません。
私はいつも世界最大級のオンライン学習サイトUdemyで学習を行っています。
Udemyでは具体的な方法を教えてくれるし質問も可能なのでとても学習しやすいと感じています。
セールも定期的に実施されています。90%オフの講義もたくさんあるのでセールのタイミングを狙って購入しています。

「Udemy」公式サイト

コメント

タイトルとURLをコピーしました