/** * Checks if the given value is a valid DateTime object. * * @param mixed $value The value that should be validated * @return void * @api */ protected function isValid($value) { if ($value instanceof \DateTime) { return; } if (!isset($this->options['locale'])) { $locale = $this->localizationService->getConfiguration()->getDefaultLocale(); } elseif (is_string($this->options['locale'])) { $locale = new \TYPO3\Flow\I18n\Locale($this->options['locale']); } elseif ($this->options['locale'] instanceof \TYPO3\Flow\I18n\Locale) { $locale = $this->options['locale']; } else { $this->addError('The "locale" option can be only set to string identifier, or Locale object.', 1281454676); return; } $strictMode = $this->options['strictMode']; $formatLength = $this->options['formatLength']; \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatLength($formatLength); $formatType = $this->options['formatType']; \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatType($formatType); if ($formatType === \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_TIME) { if ($this->datetimeParser->parseTime($value, $locale, $formatLength, $strictMode) === FALSE) { $this->addError('A valid time is expected.', 1281454830); } } elseif ($formatType === \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_DATETIME) { if ($this->datetimeParser->parseDateAndTime($value, $locale, $formatLength, $strictMode) === FALSE) { $this->addError('A valid date and time is expected.', 1281454831); } } else { if ($this->datetimeParser->parseDate($value, $locale, $formatLength, $strictMode) === FALSE) { $this->addError('A valid date is expected.', 1281454832); } } }
/** * Parses dateTime with format string for date and time defined in CLDR for * particular locale. * * @param string $dateAndTimeToParse Date and time to be parsed * @param \TYPO3\Flow\I18n\Locale $locale * @param string $formatLength One of: full, long, medium, short, or 'default' in order to use default length from CLDR * @param boolean $strictMode Work mode (strict when TRUE, lenient when FALSE) * @return mixed Array of parsed date and time elements, FALSE on failure */ public function parseDateAndTime($dateAndTimeToParse, \TYPO3\Flow\I18n\Locale $locale, $formatLength = \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_LENGTH_DEFAULT, $strictMode = true) { \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::validateFormatLength($formatLength); return $this->doParsingWithParsedFormat($dateAndTimeToParse, $this->datesReader->parseFormatFromCldr($locale, \TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_DATETIME, $formatLength), $this->datesReader->getLocalizedLiteralsForLocale($locale), $strictMode); }
/** * Formats dateTime with format string for date and time defined in CLDR for * particular locale. * * First date and time are formatted separately, and then dateTime format * from CLDR is used to place date and time in correct order. * * @param \DateTimeInterface $dateTime PHP object representing particular point in time * @param Locale $locale * @param string $formatLength One of DatesReader FORMAT_LENGTH constants * @return string Formatted date and time * @api */ public function formatDateTime(\DateTimeInterface $dateTime, Locale $locale, $formatLength = DatesReader::FORMAT_LENGTH_DEFAULT) { DatesReader::validateFormatLength($formatLength); return $this->doFormattingWithParsedFormat($dateTime, $this->datesReader->parseFormatFromCldr($locale, DatesReader::FORMAT_TYPE_DATETIME, $formatLength), $this->datesReader->getLocalizedLiteralsForLocale($locale)); }