addValidator( new DateTimeValidator($this->local), true // true for breaking the validator chain on failure ); } /** * Get the expected date and time format of any user input * * @return string */ public function getFormat() { return $this->local ? 'Y-m-d\TH:i:s' : DateTime::RFC3339; } /** * Is the date and time valid? * * @param string|DateTime $value * @param mixed $context * * @return bool */ public function isValid($value, $context = null) { if (is_scalar($value) && $value !== '' && ! preg_match('/\D/', $value)) { $dateTime = new DateTime(); $value = $dateTime->setTimestamp($value)->format($this->getFormat()); } if (! parent::isValid($value, $context)) { return false; } if (! $value instanceof DateTime) { $format = $this->getFormat(); $dateTime = DateTime::createFromFormat($format, $value); if ($dateTime === false) { $dateTime = DateTime::createFromFormat(substr($format, 0, strrpos($format, ':')), $value); } $this->setValue($dateTime); } return true; } }