JSPで日付選択ピッカーの選択範囲を相対的に指定する方法

このブログは個人的なプログラミング学習の備忘録を綴ったもので。この実装で動作することは確認済みですが、もっと簡単でいい方法があったり 、あるいはセキュリティや保守の面からあまり好ましい実装ではない可能性があります。また、コードに関する言い回し等も不正確なことが多々あると思われますので、参考にされる場合は十分に検証の上、自己責任でお願いします。
※尚、このブログは適宜加筆修正いたします。


スポンサーリンク

なんだかんだと年も明けて2021年になりました。本年もよろしくお願い致します。

さて今回は、ウェブサイト(HTML5)のフォームで日付選択ピッカーを用いる際に選択範囲を絶対日付(◯月◯日から◯月◯日まで)ではなく相対的(たとえば3日後から5日間など)に指定する方法を綴ろうと思います。

この実装をしようと思った背景は、

ECサイトで配達希望日を選択してもらう際、たとえば夜の注文で翌日を指定されたり、過去の日付やあるいはずっと先の日付を指定されると困るので、注文日を軸に◯日後から◯日間などの期限を設ける必要がありました。

HTML5で絶対日付を指定するだけならフォームのminとmaxで簡単に出来ますが、前述のような◯日後から◯日間のような実装が出来ないのでjavaの方で実装することにしました。

さて、では早速コードの方を…
解説はコード中のコメントをご参照ください。今回の実装に関係ないHTMLコードは省略しています。
※念のため、<%– と –%> で囲った部分と、/* と */ で囲った部分がコメントです。

sample.jsp

<%-- Calendarクラスをインポート --%>
<%@ page import="java.util.Calendar" %>

<%-- getInstanceメソッドで現在日時を取得して変数dateに代入 --%>
<% Calendar date = Calendar.getInstance(); 
       
        /* Calendarクラスの addメソッドで3日足す */
	date.add(Calendar.DAY_OF_MONTH, 3); 

        /* 年月日をそれぞれの変数に代入 */
	int year    = date.get(Calendar.YEAR);
	int month   = date.get(Calendar.MONTH);
	int day     = date.get(Calendar.DAY_OF_MONTH);

    /* HTMLに合わせて yyyy-mm-dd にフォーマットして変数 min に代入 */
	String min  = String.format(Locale.getDefault(), "%02d-%02d-%02d", year, month + 1, day );  

    /* 変数 minにさらに4(min+4日で計5日間)を加えて変数 maxに代入 */
	date.add(Calendar.DAY_OF_MONTH, 4); 
	year  = date.get(Calendar.YEAR);
	month = date.get(Calendar.MONTH);
	day   = date.get(Calendar.DAY_OF_MONTH);
	String max = String.format(Locale.getDefault(), "%02d-%02d-%02d", year, month + 1, day );
%>

<%-- minとmaxにスクリプト式でそれぞれ変数 minとmaxを設定 --%>
<form action="sample" method="get">
	<input type="date" name="datepicker" min="<%= min %>" max="<%= max %>">
</form>

これで下のイメージように日付選択ピッカーの選択可能範囲を指定できました。ちょとピンボケしちゃってますが(^^;)

この例では1月6日を起点に、その3日後の1月9日から13日までの5日間のみ選択できます。(ブラウザ:Chrome)

以前Androidアプリの不正クリック(アドセンス狩り的な連続クリック)対策として、一度広告をクリックされたら指定した期間広告が表示されないようにする方法【不正クリック対策】を綴りましたが、今回はその時のコードを一部転用しました。


スポンサーリンク


さて、今回は日付選択ピッカーの選択範囲を相対的にする実装方法を綴りましたが如何だったでしょうか。(あくまでも個人的な備忘録の前提ですが^^;)
このブログを読んでくれている人の中には筆者と同じように一から独学でプログラミングを学習している人も少なからずいると思います。

継続は力なりといいますが、継続するには書いたコードがちゃんと動くという体験を積み重ねることが大事ですよね。

そんな体験を後押ししてくれる参考書をいくつか紹介します。筆者が実際に使った書籍ですので自信を持ってお薦めします。尚、改訂版が出ているものについてはそちらを掲載します。

まずJavaはこの2冊がイチオシです。youtubeの動画と連動しているので非常に解りやすかったです。

  


サーブレット&JSPはこちらの2冊、ダブる部分もありますが学ぶ順番が違うので理解が深まると思います。

  


Android アプリならこちらがお薦めです。

  

筆者は実際にこれらの本で勉強してとりあえず簡単なWebアプリやAndroidアプリを自力で作れるようになりました。もちろんGoogle大先生のお世話にもなりましたが…

筆者もまだ日々力がついていくのを感じられるくらいのレベルなので偉そうなことは言えませんが、ともあれこれから始める人の参考になれば幸いです。

それでは、最後までご拝読ありがとうございました。

コメントは受け付けていません。