Indicar si una fecha yyyy-mm-dd es correcta

Código PHP

PHP – Fechas – date

Función que comprueba una fecha en formato yyyy-mm-dd indicando si es un día válido o no.

Devuelve true si es correta o false si no lo es o esta vacía.

Acepta como formato de día y mes 1 o 2 dígitos. El año es siempre de 4 dígitos.

/**
 * Class HelperValidate
 */
abstract class HelperValidate
{

    /**
     * Indica si una fecha en formato "yyyy-mm-dd" es una fecha válida.
     *
     * @param string $fecha
     *
     * @return bool
     */
    public static function isDate( $fecha ): bool
    {
        $sep   = '-';
        $fecha = ''.$fecha;
        // yyyy-mm-dd
        if ( strlen( $fecha ) != 10 ) {
            return false;
        }
        if ( $fecha[ 4 ] != $sep || $fecha[ 7 ] != $sep) {
            return false;
        }
        list( $anio, $mes, $dia ) = explode( $sep, $fecha );
        $dt = date( 'Y-m-d', mktime( 0, 0, 0, $mes, $dia, $anio ) );
        if ( false === $dt ) {
            return false;
        }
        return ( $fecha == $dt );
    }

}

Ejemplos de comprobaciones:

$date = HelperValidate::isDate('2020-12-25');
echo $date; // true

$date = HelperValidate::isDate('2020-1-1');
echo $date; //  false

$date = HelperValidate::isDate('2020-01-01');
echo $date; //  true

$date = HelperValidate::isDate('1000-01-01');
echo $date; // false

$date = HelperValidate::isDate('9999-12-25');
echo $date; // false

$date = HelperValidate::isDate('0000-12-25');
echo $date; // false

$date = HelperValidate::isDate('20-12-25');
echo $date; // false

$date = HelperValidate::isDate('25-12-2020');
echo $date; // false

$date = HelperValidate::isDate('2020/12/25');
echo $date; // false

$date = HelperValidate::isDate('2020-24-25');
echo $date; // false

$date = HelperValidate::isDate('2020-12-35');
echo $date; // false