Indicar si una fecha y hora es correcta

Código PHP

PHP – Validaciones – DateTime yyyy-mm-dd hh:ii:ss

Función que comprueba una fecha y hora en formato yyyy-mm-dd hh:ii:ss indicando si es un día y hora válidos.

Devuelve true si es correta o false si no lo es o alguno es vacío. No sirve para comprobar sólo días o sólo horas.

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
{

    /**
     * Comprueba si una fecha i hora 
     * en formato "yyyy-mm-dd hh:mm:ss" es correcta
     *
     * @param string $datetime
     *
     * @return bool
     */

    public static function isDateTime($datetime): bool
    {
        // yyyy-mm-dd hh:mm:ss
        if (strlen($datetime) != 19) {
            return false;
        }
        if ($datetime[ 4 ]  != '-' ||
            $datetime[ 7 ]  != '-' ||
            $datetime[ 10 ] != ' ' ||
            $datetime[ 13 ] != ':' ||
            $datetime[ 16 ] != ':') {

            return false;
        }
        list($fecha, $hora)     = explode(' ', $datetime);
        list($anio, $mes, $dia) = explode('-', $fecha);
        list($hora, $min, $sec) = explode(':', $hora);
        return $datetime == date('Y-m-d H:i:s',
                               mktime($hora, $min, $sec, 
                                      $mes,  $dia, $anio));
    }
}

Varios ejemplos:

$date = HelperValidate::isDateTime('2020-12-25 23:50:55');
echo $date; // true

$date = HelperValidate::isDateTime('2020-12-24 00:00:00');
echo $date; //  true

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

$date = HelperValidate::isDateTime('2020-12-24 12:610:12');
echo $date; //  false

$date = HelperValidate::isDateTime('2020-12-24 12:14:60');
echo $date; //  false

$date = HelperValidate::isDateTime('2020-12-24 12:1:2');
echo $date; //  false

$date = HelperValidate::isDateTime('2020-12-24 12:01:02');
echo $date; //  true

$date = HelperValidate::isDateTime('2020-01-01');
echo $date; //  false