Make date_modify work with DateTimeImmutable
authorRobin Gloster <robin@loc-com.de>
Sat, 11 Oct 2014 14:35:52 +0000 (16:35 +0200)
committerFabien Potencier <fabien.potencier@gmail.com>
Sat, 11 Oct 2014 20:13:17 +0000 (22:13 +0200)
lib/Twig/Extension/Core.php
test/Twig/Tests/Fixtures/filters/date_immutable.test

index a94e97c..8feb229 100644 (file)
@@ -473,9 +473,16 @@ function twig_date_format_filter(Twig_Environment $env, $date, $format = null, $
 function twig_date_modify_filter(Twig_Environment $env, $date, $modifier)
 {
     $date = twig_date_converter($env, $date, false);
-    $date->modify($modifier);
+    $resultDate = $date->modify($modifier);
 
-    return $date;
+    // This is a hack to ensure PHP 5.2 support and support for DateTimeImmutable
+    // DateTime::modify does not return the modified DateTime object < 5.3.0
+    // and DateTimeImmutable does not modify $date.
+    if (null === $resultDate) {
+        return $date;
+    } else {
+        return $resultDate;
+    }
 }
 
 /**
index b89ceb3..4e18325 100644 (file)
@@ -8,6 +8,7 @@ version_compare(phpversion(), '5.5.0', '>=')
 {{ date1|date('d/m/Y H:i:s', 'Asia/Hong_Kong') }}
 {{ date1|date('d/m/Y H:i:s', timezone1) }}
 {{ date1|date('d/m/Y H:i:s') }}
+{{ date1|date_modify('+1 hour')|date('d/m/Y H:i:s') }}
 
 {{ date2|date('d/m/Y H:i:s P', 'Europe/Paris') }}
 {{ date2|date('d/m/Y H:i:s P', 'Asia/Hong_Kong') }}
@@ -27,6 +28,7 @@ October 4, 2010 13:45
 04/10/2010 19:45:00
 04/10/2010 07:45:00
 04/10/2010 13:45:00
+04/10/2010 14:45:00
 
 04/10/2010 19:45:00 +02:00
 05/10/2010 01:45:00 +08:00