formats = $formats; } public function execute(array $data) { if ($this->isFieldNotEmpty($data)) { foreach ($this->formats as $format) { if ($this->isValidDate($data[$this->field], $format)) { return true; } } return false; } return true; } public function isValidDate($value, $format) { $date = DateTime::createFromFormat($format, $value); if ($date !== false) { $errors = DateTime::getLastErrors(); if ($errors === false || $errors['error_count'] === 0 && $errors['warning_count'] === 0) { return $date->getTimestamp() > 0; } } return false; } }