PHPで日付の妥当性をチェックするプログラムです。
checkdate()
を使えばうるう年にも対応したチェックが簡単にできます。
日付の形式だけをチェックするならstrptime()
でサクッとチェックできますよ。
checkdate関数
checkdate()
は日付をチェックし、存在していればtrue
を、存在していなければfalse
を返します。
以下のように引数に年月日をカンマ区切りで入れるだけです。
日本の日付と違って、年は最後になりますので注意しましょう。
checkdate(月, 日, 年);
日付が存在するか、if文を使って簡単なプログラムを書いてみます。
ちなみに、下記はうるう年の日付です。
日付の妥当性をチェック
1 2 3 4 5 6 7 8 9 |
if(checkdate(2, 29, 2016)) { echo '受け付けました。'; } else { echo '存在しない日付です。'; } |
以下のように表示
受け付けました。
日付型のデータをチェックする
checkdate()
は上記のように簡単にチェックできますが、通常日付は-
(ハイフン)などの記号や「年月日」などで区切られている場合が多いでしょう。
そのため、年月日を一旦バラしてカンマ区切りで当てはめる必要が出てきます。
以下のようにlist()
とexprode()
で日付形式のデータから年月日だけを抽出し、それぞれ変数に入れたものをcheckdate()
でチェックしてみましょう。
1 2 3 4 5 6 7 8 9 |
$date = '2016-02-29'; list($Y, $m, $d) = explode('-', $date); if (checkdate($m, $d, $Y) === true) { echo $date; } else { echo '存在しない日付です。'; } |
以下のように表示
2016-02-29
strptime関数
「YYYY-mm-dd」の形式になっているかなど、形式をチェックするだけならstrptime()
で事足ります。
striptime()
はうるう年や、4月は30日までなどの日付の有効性はチェックできません。
ただ、2月32日や13月1日など、あり得ない日付はチェックします。
日付の形式のみチェック
1 2 3 4 5 |
$date = '2015-2-28'; if (strptime($date, '%Y-%m-%d')) { echo $date; } |
以下のように表示
2015-2-28
日付が-
(ハイフン)繋ぎを指定したい場合、strptime()
で-
(ハイフン)を指定します。
/(スラッシュ)など他の文字列で繋がれた日付はエラーとなります。
1 2 3 4 5 |
$date = '2015/2/28'; if (!strptime($date, '%Y-%m-%d')) { echo '形式が違います。'; } |
以下のように表示
形式が違います。
日付の扱いはややこしいイメージがありますが、日付型なのか文字列型なのかなど、型を意識するとスムーズにコーディングできますね。
PHPは型を意識しなくとも勝手に変換してくれたりと便利な言語ですが、本来プログラミング言語では型をきちんと指定しないと動いてくれないものが多いのです。
型を意識すれば、日付の処理も簡単にこなすことができるでしょう。
$date = ‘2015/2/28’;
if (strptime($date, ‘%Y-%m-%d’)) {
echo ‘形式が違います。’;
}
ではなく、
$date = ‘2015/2/28’;
if (!strptime($date, ‘%Y-%m-%d’)) {
echo ‘形式が違います。’;
}
だと思います。
確かにそうですね。
ご指摘のとおり修正しました。
ありがとうございます。