takafumi blog

日々の勉強メモ

PHPで日付フォーマットのチェック。

環境   CentOS 7.0 PHP 5.6

以外とよく聞かれる、日付形式「yyyy-mm-dd hh:ii:ss」が正しいかチェックする方法。

<?php
function checkDatetimeFormat($datetime){
    return $datetime === date("Y-m-d H:i:s", strtotime($datetime));
}

正規表現で書く人が多いが、こちらの方が書くのも楽だし可読性もよい。
またdate()のフォーマットを変えれば、別の形式の場合も簡単にチェックできる。


正規表現だと

<?php
function checkDatetimeFormat($datetime){
    return preg_match('/^(?P<year>[0-9]{4})\-(?P<month>[0-9]{2})-(?P<day>[0-9]{2}) ([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$/', $datetime, $m) === 1
           && checkdate($m['month'] , $m['day'] , $m['year']);
}


ポイントは正規表現だけではフォーマットのチェックはできないので、checkdate()を実行する必要がある事。

正規表現で、もう少し精密にチェックする事もできるが、閏年までチェックするのは多分不可能。

上の例だと、checkdate()を通さなくても、正しい日付かどうかもチェックできる。

どの言語でも、日付のチェックは組み込みの関数を使うほうが無難。