こんにちは、さるまりんです。
プログラムを書くとき入力値の有効性チェックをします。今回はPHPでの日付チェックについてです。
strptime()で形式チェック
日付文字列はyyyy/mm/dd
やyyyy-mm-dd
の形式の文字列で表現されることが多いです。
文字列が正しい日付の形式になっているかをチェックするにはstrptime()
関数を使います。
$date_str = '2020-01-20'; // チェックする文字列
$format_str = '%Y-%m-%d'; // ハイフン区切りの年月日の形式
$is_date_str = strptime($date_str, $format_str);
これで$is_date_str
がfalse
でなければ形式チェックはOKです。
strptime()
は文字列を形式に基づいてパースする関数です。正しい文字列の場合はパースされた結果の配列を返します。パースできなかったときにはfalse
を返すのでfalse
の時は正しい形式ではないということです。
ただし、strptime()
では形式はチェックできますが、有効な日付かどうかのチェックはできません。
例えば2020-02-30
。
今年の2月はうるう年なので29日までありますが、30日はありません。
$date_str = '2020-02-30';
$format_str = '%Y-%m-%d';
if (strptime($date_str, $format_str)) {
echo "OK";
} else {
echo "NG";
}
が、このプログラムはOKを表示してします。
checkdate()で有効日チェック
日付が有効かをチェックするにはcheckdate()
関数を使います。
呼び出し方はcheckdate(月, 日, 年)
です。
2020-02-30
をcheckdate()
でチェックするとfalse
を返してくれます。
if (checkdate(2, 30, 2020)) {
echo "OK";
} else {
echo "NG";
}
上記を実行するとNGが表示されます。
日付がyyyy-mm-dd
の文字列であった時は、explode()
で分割することでcheckdate()
を呼び出す準備ができます。
$date_str = '2020-02-30';
list($year, $month, $day) = explode("-", $date_str);
if (checkdate($month, $day, $year)) {
echo "OK";
} else {
echo "NG";
}
用意されている関数での簡単にチェックできるの便利ですね。
読んでくださってありがとうございます。
それではまた!