JavaScript | HTML / CSS 連携:フォーム応用 - date入力

JavaScript JavaScript
スポンサーリンク

date入力は「カレンダーUIで“正しい日付”を確実に受け取るための入力欄」

type="date" は、 ユーザーに「日付」を入力してもらうための専用入力欄 です。

テキスト入力と違い、 ブラウザが「カレンダーUI」を表示してくれるため、

  • 入力ミスがほぼ起きない
  • 日付の形式が統一される(YYYY-MM-DD)
  • スマホでは日付専用の入力UIが出る

という強力なメリットがあります。

誕生日 予約日 締め切り日 イベント開催日

こういった「日付が必須のフォーム」では、 type="date" を使うことで UX とデータ品質が一気に上がります。

date入力の基本形と「送られる値の形式」

いちばんシンプルな date入力

<input type="date" name="birthday">

フォームに入れるとこうなります。

<form action="/register" method="post">
  <p>生年月日:</p>
  <input type="date" name="birthday">
  <button type="submit">登録</button>
</form>

ユーザーがカレンダーから「1995-04-12」を選ぶと、 送信される値は birthday = "1995-04-12" という形になります。

重要ポイント: date入力は「YYYY-MM-DD」という ISO形式で送られる。 日本語の「1995年4月12日」では送られない。

この統一された形式のおかげで、 サーバー側で扱いやすく、データの整合性も保ちやすいです。

min・max で「選べる日付の範囲」を制限する

過去の日付だけ選ばせたい場合

<input
  type="date"
  name="birthday"
  max="2026-07-14"
>

今日より未来の日付を選ばせたくない場合に使います。

未来の日付だけ選ばせたい場合

<input
  type="date"
  name="event_date"
  min="2026-07-14"
>

予約日や締め切り日など、 「今日以降しか選べない」ようにしたい場面で便利です。

範囲を決める

<input
  type="date"
  name="term"
  min="2026-01-01"
  max="2026-12-31"
>

これで、 2026年の範囲内しか選べなくなります。

min・max は「この日付欄のルール」をブラウザに伝えるもの。 ユーザーの入力ミスを大幅に減らせる。

よくある date入力の使い方をフォームでイメージする

誕生日入力欄

<form>
  <p>生年月日:</p>
  <input
    type="date"
    name="birthday"
    required
  >
  <button type="submit">送信</button>
</form>

誕生日は必須なので required を付けることが多いです。

予約日入力欄(今日以降のみ)

<form>
  <p>予約日:</p>
  <input
    type="date"
    name="reserve_date"
    min="2026-07-14"
    required
  >
  <button type="submit">予約する</button>
</form>

「過去の日付で予約される」事故を防げます。

JavaScript と date入力:値は「文字列として来る」ことを理解する

値を読む(ユーザーが選んだ日付を取得)

HTML:

<input type="date" id="birthday" name="birthday">
<button type="button" id="show">表示</button>
<p id="result"></p>

JavaScript:

const input = document.querySelector("#birthday");
const button = document.querySelector("#show");
const result = document.querySelector("#result");

button.addEventListener("click", () => {
  const value = input.value; // "1995-04-12" のような文字列
  result.textContent = `選択された日付:${value}`;
});
JavaScript

ここでのポイントは、

input.value は「YYYY-MM-DD の文字列」 であり、Dateオブジェクトではないということ。

Dateオブジェクトに変換する

const dateObj = new Date(input.value);
JavaScript

これで、 年・月・日を使った計算ができるようになります。

日付の比較も簡単にできる

const selected = new Date(input.value);
const today = new Date();

if (selected < today) {
  result.textContent = "過去の日付が選ばれています。";
}
JavaScript

date入力は「日付の文字列」を返す。 JavaScriptで計算したいときは Dateオブジェクトに変換する。 この感覚がとても重要です。

HTML側のバリデーションと組み合わせる

required で必須入力にする

<input type="date" name="birthday" required>

空のまま送信しようとすると、 ブラウザが止めてくれます。

min・max と required の組み合わせ

<input
  type="date"
  name="event_date"
  min="2026-07-14"
  max="2026-12-31"
  required
>

「必ず選んでほしい日付で、範囲も決まっている」 という場面でよく使います。

date入力の注意点:ブラウザによってUIが違う

カレンダーUIはブラウザ依存

Chrome Safari Firefox Edge

それぞれで date入力の見た目が違います。

スマホでは「日付専用の入力UI」が出るため、 PCよりも使いやすいことが多いです。

date入力は「ブラウザ標準のUI」を使うため、 完全にデザインを統一することは難しい。 ただし、入力ミスが減るメリットは圧倒的。

date入力を使うか迷ったときの判断基準

「ここは“正しい日付”を確実に受け取りたい場面か?」

自分にこう聞いてください。

ここで欲しいのは、

自由な文字列ではなく 「正しい形式の日付」か?

YES → type="date"

誕生日 予約日 締め切り日 イベント日 開始日・終了日

こういったものは、 date入力を使うことで UX とデータ品質が大幅に向上します。

逆に、

「年月だけ欲しい」 → type="month" 「時間だけ欲しい」 → type="time" 「日時をまとめて欲しい」 → type="datetime-local"

という選択肢もあります。

初心者として「date入力」で絶対に掴んでほしいこと

type="date" は、 「カレンダーUIで、正しい形式の日付を確実に受け取るための入力欄」 です。

YYYY-MM-DD の形式で送られる minmax で選べる範囲を制限できる required と組み合わせて必須入力にできる JavaScriptでは input.value は文字列なので、Dateオブジェクトに変換して扱う ブラウザによってUIが違うが、入力ミスが圧倒的に減る

あなたが date入力を書くときに、 「この欄は“正しい日付”を確実に受け取る場所で、 ブラウザのカレンダーUIを最大限活かすんだよな」 とイメージできていたら、 もう date入力を“ただのカレンダー欄”ではなく、 “ユーザーの操作とアプリのロジックをつなぐ、強力で安全なインターフェース”として扱えている状態です。

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