Esta función es muy útil, porque uno puede modificar el formato a validar, es decir que nos sirve para validar solo una fecha como así también el caso cuando tenemos fecha y hora.
function validarFecha($date, $format = 'Y-m-d H:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; } var_dump(validarFecha('2018-02-28 12:12:12')); // Devuelve true var_dump(validarFecha('2018-02-30 12:12:12')); // Devuelve false /* Puede darse el caso que la variable $format si la tomamos directamente desde un <INPUT> tipo DATETIME llegue con este formato '2018-02-28T12:12:12' para este caso la función sería de la siguiente manera */ function validarFecha($date, $format = 'Y-m-d\TH:i:s') { $d = DateTime::createFromFormat($format, $date); return $d && $d->format($format) == $date; } var_dump(validarFecha('2018-02-28T12:12:12')); // Devuelve true var_dump(validarFecha('2018-02-30T12:12:12')); // Devuelve false