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