yamata.programmer.blog

28歳 プログラマになるために通った道に落ちていた情報を発信します!

【PHP・Laravel】日付が正しいかチェックする方法【結論:checkdate関数】

今回の記事を読んで欲しい方

  • 何らかの機能で日付が妥当かチェックしたい方
  • 存在しない日付を弾きたい方

今回は日付が正しいかチェックする方法について書いていこうと思います。

 

結論:checkdate関数を利用する

PHPで日付の妥当性を確認したい時、checkdate関数を使用します。

存在しない日付(2月31日、9月31日、13月1日等)もチェックできます。

日付を自分で決めてチェックする場合

$month = 29;
$day = 12;
$year = 2021;

if(checkdate($month, $day, $year)){
echo "true";
} else {
echo "false";
}

引数の名前はわかりやすいように指定しておりますが、理解できれば何でもいいと思います。

引数は全てint型で指定します。戻り値はboolean型で、trueかfalseを返します。

  • month:月の指定。1〜12の間で指定します。
  • day:日の指定。1〜31の間で指定します。
  • year:年の指定。1〜32767の間で指定します。
checkdate(月, 日, 年)

月、日、年の順番で指定する所を注意して下さい。

日付型のデータをチェックする場合

例えば、

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

formタグは省略しますが、こちらで送信されるデータはハイフンで区切られています。

2021-02-07の形ですね。

しかしこのままの形だとcheckdate関数には入れられません。

どうすればいいか。

結論は、explode関数でハイフンを取り除き、list型の変数を用意して入れれば良いです。

// $dateには上記のinputタグからformで送信され2021-02-07が入っていると仮定
$date = $request->date;

list($year, $month, $day) = explode('-', $date);

if(checkdate($month, $day, $year)){
echo "true";
} else {
echo "false";
}

後は同じです。

 

今回のまとめ

checkdate関数を利用すれば日付の妥当性をチェックできる。戻り値はboolean型で、trueかfalseを返す。

checkdate(月, 日, 年) の形で確認したい日付を入れる。

月の指定は1〜12の間、日の指定は1〜31の間、年の指定は132767の間で指定する。

日付型でハイフンが入っている場合は、explode関数でハイフンを取り除き、list型の変数を用意して入れる。

今回は以上です。