/** * Render the supplied DateTime object as a formatted date. * * @param mixed $date either a \DateTime object or a string that is accepted by \DateTime constructor * @param string $format Format String which is taken to format the Date/Time if none of the locale options are set. * @param string $localeFormatType Whether to format (according to locale set in $forceLocale) date, time or datetime. Must be one of TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_*'s constants. * @param string $localeFormatLength Format length if locale set in $forceLocale. Must be one of TYPO3\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_LENGTH_*'s constants. * @param string $cldrFormat Format string in CLDR format (see http://cldr.unicode.org/translation/date-time) * @throws ViewHelperException * @return string Formatted date * @api */ public function render($date = null, $format = 'Y-m-d', $localeFormatType = null, $localeFormatLength = null, $cldrFormat = null) { if ($date === null) { $date = $this->renderChildren(); if ($date === null) { return ''; } } if (!$date instanceof \DateTime) { try { $date = new \DateTime($date); } catch (\Exception $exception) { throw new ViewHelperException('"' . $date . '" could not be parsed by \\DateTime constructor.', 1241722579, $exception); } } $useLocale = $this->getLocale(); if ($useLocale !== null) { try { if ($cldrFormat !== null) { $output = $this->datetimeFormatter->formatDateTimeWithCustomPattern($date, $cldrFormat, $useLocale); } else { $output = $this->datetimeFormatter->format($date, $useLocale, array($localeFormatType, $localeFormatLength)); } } catch (I18nException $exception) { throw new ViewHelperException(sprintf('An error occurred while trying to format the given date/time: "%s"', $exception->getMessage()), 1342610987, $exception); } } else { $output = $date->format($format); } return $output; }
/** * @param \DateTime $dateTime * @param mixed $locale string or boolean or \TYPO3\Flow\I18n\Locale * @param array $formatConfiguration The format configuration to use, index 0 is the type, index 1 is the format length * * @throws \TYPO3\Fluid\Core\ViewHelper\Exception\InvalidVariableException * @throws \TYPO3\Fluid\Core\ViewHelper\Exception * @return string */ protected function renderUsingLocale(\DateTime $dateTime, $locale, array $formatConfiguration) { if ($locale instanceof I18n\Locale) { $useLocale = $locale; } elseif (is_string($locale)) { try { $useLocale = new I18n\Locale($locale); } catch (I18n\Exception $exception) { throw new ViewHelper\Exception\InvalidVariableException('"' . $locale . '" is not a valid locale identifier.', 1342610148, $exception); } } else { $useLocale = $this->localizationService->getConfiguration()->getCurrentLocale(); } try { $return = $this->formatter->format($dateTime, $useLocale, $formatConfiguration); } catch (I18n\Exception $exception) { throw new ViewHelper\Exception(sprintf('An error occurred while trying to format the given date/time: "%s"', $exception->getMessage()), 1342610987, $exception); } return $return; }