/** * 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 Neos\Flow\I18n\Cldr\Reader\DatesReader::FORMAT_TYPE_*'s constants. * @param string $localeFormatLength Format length if locale set in $forceLocale. Must be one of Neos\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 \DateTimeInterface) { 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; }
/** * @test * @dataProvider sampleDataForSpecificFormattingMethods */ public function specificFormattingMethodsWork(array $parsedFormat, $expectedResult, $formatType) { $formatLength = I18n\Cldr\Reader\DatesReader::FORMAT_LENGTH_FULL; $mockDatesReader = $this->createMock(I18n\Cldr\Reader\DatesReader::class); $mockDatesReader->expects($this->once())->method('parseFormatFromCldr')->with($this->sampleLocale, $formatType, $formatLength)->will($this->returnValue($parsedFormat)); $mockDatesReader->expects($this->once())->method('getLocalizedLiteralsForLocale')->with($this->sampleLocale)->will($this->returnValue($this->sampleLocalizedLiterals)); $formatter = new I18n\Formatter\DatetimeFormatter(); $formatter->injectDatesReader($mockDatesReader); $methodName = 'format' . ucfirst($formatType); $result = $formatter->{$methodName}($this->sampleDateTime, $this->sampleLocale, $formatLength); $this->assertEquals($expectedResult, $result); }