refactored date filter code
authorFabien Potencier <fabien.potencier@gmail.com>
Fri, 30 Dec 2011 07:58:12 +0000 (08:58 +0100)
committerFabien Potencier <fabien.potencier@gmail.com>
Fri, 30 Dec 2011 07:58:12 +0000 (08:58 +0100)
CHANGELOG
lib/Twig/Extension/Core.php

index 777ab65..8c742cf 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 * 1.5.0-RC2
 
+ * fixed the date filter for DateInterval instances (setTimezone() does not exist for them)
  * refactored Twig_Template::display() to ease its extension
  * added a number_format filter
 
index f521523..a03156b 100644 (file)
@@ -313,24 +313,26 @@ function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $
         $format = $env->getExtension('core')->getDateFormat();
     }
 
-    if (!$date instanceof DateInterval) {
-        if (!$date instanceof DateTime) {
-            $asString = (string) $date;
-            if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) {
-                $date = new DateTime('@'.$date);
-                $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
-            } else {
-                $date = new DateTime($date);
-            }
-        }
+    if ($date instanceof DateInterval || $date instanceof DateTime) {
+        return $date->format($format);
+    }
 
-        if (null !== $timezone) {
-            if (!$timezone instanceof DateTimeZone) {
-                $timezone = new DateTimeZone($timezone);
-            }
+    // convert to a DateTime
+    $asString = (string) $date;
+    if (ctype_digit($asString) || (!empty($asString) && '-' === $asString[0] && ctype_digit(substr($asString, 1)))) {
+        $date = new DateTime('@'.$date);
+        $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
+    } else {
+        $date = new DateTime($date);
+    }
 
-            $date->setTimezone($timezone);
+    // set Timezone
+    if (null !== $timezone) {
+        if (!$timezone instanceof DateTimeZone) {
+            $timezone = new DateTimeZone($timezone);
         }
+
+        $date->setTimezone($timezone);
     }
 
     return $date->format($format);