[TASK] Support \DateTimeInterface in fluid Format\DateViewHelper 18/45218/2
authorMorton Jonuschat <m.jonuschat@mojocode.de>
Fri, 11 Dec 2015 21:38:02 +0000 (22:38 +0100)
committerMarkus Klein <markus.klein@typo3.org>
Sat, 12 Dec 2015 21:24:56 +0000 (22:24 +0100)
This patch changes the fluid DateViewHelper to check for date objects
implementing \DateTimeInterface so that \DateTime as well as
\DateTimeImmutable can be supplied as parameter.

Resolves: #72149
Releases: master
Change-Id: I3c3e2648168b283f8ec1fc35845a449c63d0b6ff
Reviewed-on: https://review.typo3.org/45218
Reviewed-by: Georg Ringer <georg.ringer@gmail.com>
Tested-by: Georg Ringer <georg.ringer@gmail.com>
Reviewed-by: Daniel Goerz <ervaude@gmail.com>
Tested-by: Daniel Goerz <ervaude@gmail.com>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/fluid/Classes/ViewHelpers/Format/DateViewHelper.php
typo3/sysext/fluid/Tests/Unit/ViewHelpers/Format/DateViewHelperTest.php

index fb6adf0..d6329b0 100644 (file)
@@ -18,7 +18,7 @@ use TYPO3\CMS\Fluid\Core\ViewHelper\Exception;
 use TYPO3\CMS\Fluid\Core\ViewHelper\Facets\CompilableInterface;
 
 /**
- * Formats a \DateTime object.
+ * Formats an object implementing \DateTimeInterface.
  *
  * = Examples =
  *
@@ -90,9 +90,9 @@ class DateViewHelper extends AbstractViewHelper implements CompilableInterface
     /**
      * 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 mixed $date either an object implementing DateTimeInterface or a string that is accepted by DateTime constructor
      * @param string $format Format String which is taken to format the Date/Time
-     * @param mixed $base A base time (a DateTime object or a string) used if $date is a relative date specification. Defaults to current time.
+     * @param mixed $base A base time (an object implementing DateTimeInterface or a string) used if $date is a relative date specification. Defaults to current time.
      *
      * @return string Formatted date
      * @throws Exception
@@ -147,9 +147,9 @@ class DateViewHelper extends AbstractViewHelper implements CompilableInterface
             $date = 'now';
         }
 
-        if (!$date instanceof \DateTime) {
+        if (!$date instanceof \DateTimeInterface) {
             try {
-                $base = $base instanceof \DateTime ? $base->format('U') : strtotime((MathUtility::canBeInterpretedAsInteger($base) ? '@' : '') . $base);
+                $base = $base instanceof \DateTimeInterface ? $base->format('U') : strtotime((MathUtility::canBeInterpretedAsInteger($base) ? '@' : '') . $base);
                 $dateTimestamp = strtotime((MathUtility::canBeInterpretedAsInteger($date) ? '@' : '') . $date, $base);
                 $date = new \DateTime('@' . $dateTimestamp);
                 $date->setTimezone(new \DateTimeZone(date_default_timezone_get()));
index 758ed48..d23c9c9 100644 (file)
@@ -91,6 +91,15 @@ class DateViewHelperTest extends UnitTestCase
     /**
      * @test
      */
+    public function viewHelperSupportsDateTimeImmutable()
+    {
+        $actualResult = $this->subject->render(new \DateTimeImmutable('1980-02-01'), 'd.m.Y');
+        $this->assertEquals('01.02.1980', $actualResult);
+    }
+
+    /**
+     * @test
+     */
     public function viewHelperReturnsEmptyStringIfChildrenIsNULL()
     {
         $this->subject->expects($this->once())->method('renderChildren')->will($this->returnValue(null));