public function validate($input) : bool
{
if ($input instanceof DateTime) {
return true;
} elseif (!is_string($input)) {
return false;
} elseif (is_null($this->format)) {
return false !== strtotime($input);
}
$dateFromFormat = DateTime::createFromFormat($this->format, $input);
return $dateFromFormat && $input === date($this->format, $dateFromFormat->getTimestamp());
}