diff --git a/lib/Twig/Extension/Core.php b/lib/Twig/Extension/Core.php index a94e97c4bd..8feb229853 100644 --- a/lib/Twig/Extension/Core.php +++ b/lib/Twig/Extension/Core.php @@ -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; + } } /** diff --git a/test/Twig/Tests/Fixtures/filters/date_immutable.test b/test/Twig/Tests/Fixtures/filters/date_immutable.test index b89ceb3094..4e18325620 100644 --- a/test/Twig/Tests/Fixtures/filters/date_immutable.test +++ b/test/Twig/Tests/Fixtures/filters/date_immutable.test @@ -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