/**
  * 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;
 }