目次
日付の書式と妥当性をチェックする
PHPで日付書式の形式と、その日付自体が正しいかをチェックする方法をメモ。
環境:PHP 7.4.4
日付書式の形式をチェックする
日付の値が、あらかじめて決めておいた形式の書式であるかを確認する。
(形式) YYYY-MM-DD
年(西暦 )4ケタ
月 2ケタ(もしくは1ケタ)
日 2ケタ(もしくは1ケタ)
それぞれ間に-(ハイフン)を挟む。
htmlフォームの場合inputタグ、type属性にdateを指定した場合にサーバー側で受け取れる値の形式となる
<p>日付: <input type="date" name="date"></p>
正規表現で形式をチェックする
正規表現を使用してpreg_match関数で形式をチェックする
if(preg_match('/\A[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\z/', $date) == false) { return 'NG : 日付の形式が正しくありません。'; }
日付の妥当性をチェックする
13月や、うるう年ではない年の2月29日など、暦上存在しない月日ではないか、日付自体の正しさをチェックする
checkdate関数で妥当性をチェックする
PHPのcheckdate関数を使用する。
https://www.php.net/manual/ja/function.checkdate.php
list($year, $month, $day) = explode('-', $date); if(checkdate($month, $day, $year) == false) { return 'NG : 日付が正しくありません。'; }
explode関数を使用して日付を年、月、日に分解し、checkdate関数へ渡す値としている。
「年」 $year
「月」 $month
「日」 $day
SAMPLE
上記の形式チェックと、妥当性チェックをまとめて行うためのサンプル
<?php $date = "2021-03-21"; $result = validateDateFormat($date); print($result); function validateDateFormat($date) { if(preg_match('/\A[0-9]{4}-[0-9]{1,2}-[0-9]{1,2}\z/', $date) == false) { return 'NG : 日付の形式が正しくありません。'; } list($year, $month, $day) = explode('-', $date); if(checkdate($month, $day, $year) == false) { return 'NG : 日付が正しくありません。'; } else { return 'OK!'; } }