おはようございます。株式会社るーぷのコーダー、三木と申します。
          やっと涼しい日が来たり来なかったりしはじめました。
          3~4年ほど前から、涼しくなってくると我が家の玄関に設置されている電気メーターにアシナガバチがやってくるようになりました。
          はじめのうちはビビリ散らかしていたのですが、「アシナガバチはおとなしい」
          「10~11月に集まってくるアシナガバチはお爺ちゃんらしい。(調べたところ、役割を終えたオスの場合が多く巣作りしないとのこと。)」
          と聞いたので、「ほな、えぇか。。。」と毎年放置してます。
        
虫が大の苦手なのですが、「怖い顔して意外とこいつは臆病らしい。」とか聞くと割と許しちゃいます私。
<input type=”date”>
さて今回は、日時が入力できる”<input type=”date”>”に、現在から○日後~○日後と制限をかける方法をご紹介します。
          日付の入力欄が作成できる、<input type=”date”>。
          クリックすると、日付が入力できます。
        
          更に、min属性を指定すると日付の最小値(○年○月○日”から”)、
          max属性を指定すると最大値(○年○月○日”まで”)と、選択範囲を指定することができます。
        
“JavaScript/JQuery”で日付を現在の○日後から選択できるようにする。【初心者向け】
それでは本題に入ります。
以下、コードです。(初心者向けです。理由は、コードを書いた私が初心者だからです。)
HTML
<input type=”date”>
JavaScript(JQuery)
$(function(){
                        // input[type=”date”]のminとmaxを現在日時取得して指定
                          // min (現在の3日後)
                          var minD = new Date();// 現在日時取得
                          minD.setDate(minD.getDate() + 3);// 現在日時の日数+3して上書き
                          var minYear = minD.getFullYear();// 上書きしたので、年月日それぞれ取得
                          var minMonth = minD.getMonth() + 1;
                          if(minMonth < 10){// 2桁にしないといけないので 10未満なら頭に0を追加
                            var minMonth = ‘0’ + minMonth;
                          }
                          var minDate = minD.getDate();
                          if(minDate < 10){// 2桁にしないといけないので 10未満なら頭に0を追加
                            var minDate = ‘0’ + minDate;
                          }
                          var min = minYear + ‘-‘ + minMonth  + ‘-‘ + minDate;// yyyy-mm-ddになるように
                          $(‘input[type=”date”]’).attr(‘min’, min);
                          // max (現在の30日後)
                          var maxD = new Date();// 現在日時取得
                          maxD.setDate(maxD.getDate() + 30);// 現在日時の日数+30して上書き
                          var maxYear = maxD.getFullYear();// 上書きしたので、年月日それぞれ取得
                          var maxMonth = maxD.getMonth() + 1;
                          if(maxMonth < 10){// 2桁にしないといけないので 10未満なら頭に0を追加
                            var maxMonth = ‘0’ + maxMonth;
                          }
                          var maxDate = maxD.getDate();
                          if(maxDate < 10){// 2桁にしないといけないので 10未満なら頭に0を追加
                            var maxDate = ‘0’ + maxDate;
                          }
                          var max = maxYear + ‘-‘ + maxMonth  + ‘-‘ + maxDate;// yyyy-mm-ddになるように
                          $(‘input[type=”date”]’).attr(‘max’, max);
                    });
                
以下が流れになります。
- 
            現在時刻を取得する。
var minD = new Date(); 
- 
            .setDate()で年月日の”日”の部分を、「取得した現在時刻の”日”」+3にして、さっきの変数に上書き。
minD.setDate(minD.getDate() + 3); 
- 
            +3して上書きしたので”年””月””日”それぞれ取得。ただし
 min=”2023-09-28″のように「年4桁」「月2桁」「日2桁」でなければいけないので、
 年は良いとして月と日は10未満の場合頭に0を追加する。var minYear = minD.getFullYear(); var minMonth = minD.getMonth() + 1; if(minDate < 10){ 
 var minDate = ‘0’ + minDate;
 }
- 
            min=”2023-09-28″のような形になるよう文字と変数をハイフンを継ぎ接ぎ。
var min = minYear + ‘-‘ + minMonth + ‘-‘ + minDate; 
- 
            <input type=”date”>のmin属性と先程から頑張ったアレを指定。
$(‘input[type=”date”]’).attr(‘min’, min); 
- max属性も同様に…
参考サイト様
こちらを参考に仕上げました。ありがとうございます。
jQueryで日付や時刻を表示する方法【new Date()の使い方を解説】
https://web.skipjack.tokyo/javascript/jquery_date/#chapter-6
【JavaScript入門】日付の加算・減算方法まとめ(月またぎ/うるう年)
https://www.sejuku.net/blog/22925#index_id2
それでは、失礼いたします。


