こんにちは、さるまりんです。
プログラムを書くとき入力値の有効性チェックをします。今回は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";
}
用意されている関数での簡単にチェックできるの便利ですね。
読んでくださってありがとうございます。
それではまた!