【PHP】日付の形式 & 妥当性チェック(SAMPLE)

日付の書式と妥当性をチェックする

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!';
    }
}

Follow me!