Posted at

【PHP】DateTimeクラスでcheckdate()より汎用性のある日付チェックを行う

More than 1 year has passed since last update.

PHPのUser Contributed Notesより抜粋。

http://php.net/manual/ja/function.checkdate.php#113205

function validateDate($date, $format = 'Y-m-d H:i:s')

{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}

checkdate()と比べて

・第2引数でフォーマットも指定できるので、汎用性がある。

・チェックしたい値を編集することなく、フォーマットで調整できる

・日付だけでなく、時分秒まで指定してチェックが可能。

めちゃくちゃ便利。

色んな日付のバリデーションに応用できそうなので、覚えておきたいです。

以下きちんと説明できるように、各処理に関する備忘録。

$d

例:

'a'等日付けとして判定できるような値が入力されなかった場合、falseが返っているので、

入力値は日付けとして扱える値なのかのチェック。


$d->format($format) == $date;

ここほんと素敵。

生成された日付と、入力値の比較と処理自体は単純だけれども、

フォーマットを指定できることでチェックのし易さ、範囲がグンと広がっている。

例:存在しない日付けを入力した場合

validateDate('2018-07-32', 'Y-m-d');

formatメソッドからは2018-08-01が生成され、

'2018-07-32' と '2018-08-01'の比較が行われ、一致しないため、falseが返る。

例:入力値のフォーマットのチェック

validateDate('07/2018', 'm/y');

formatメソッドからは'18/07'が生成され、

'07/2018' と '18/07'の比較が行われ、一致しないため、falseが返る。