bug #1449 Fixed the date filter's timezone not being set correctly with strings (gbouchez)

This PR was merged into the 1.16-dev branch.

Discussion
----------

Fixed the date filter's timezone not being set correctly with strings

When the date filter is used on a string and the timezone argument is specified, the timezone is ignored because of this :

    $date = new DateTime($date, $defaultTimezone);
    if (false !== $timezone) {
        $date->setTimezone($defaultTimezone);
    }

Since the date is initialized with `$defaultTimezone` as its timezone, using `$date->setTimezone($defaultTimezone);` has no effect, and the date is displayed without changes since it is considered to already be from this timezone.

Might fix issue #1340

Commits
-------

44aaa5b Fixed the date filter's timezone not being set correctly with strings
This commit is contained in:
Fabien Potencier
2014-10-14 19:07:31 +02:00
+10 -10
View File
@@ -507,23 +507,23 @@ function twig_date_modify_filter(Twig_Environment $env, $date, $modifier)
function twig_date_converter(Twig_Environment $env, $date = null, $timezone = null)
{
// determine the timezone
if (!$timezone) {
$defaultTimezone = $env->getExtension('core')->getTimezone();
} elseif (!$timezone instanceof DateTimeZone) {
$defaultTimezone = new DateTimeZone($timezone);
} else {
$defaultTimezone = $timezone;
if (false !== $timezone) {
if (null === $timezone) {
$timezone = $env->getExtension('core')->getTimezone();
} elseif (!$timezone instanceof DateTimeZone) {
$timezone = new DateTimeZone($timezone);
}
}
// immutable dates
if ($date instanceof DateTimeImmutable) {
return false !== $timezone ? $date->setTimezone($defaultTimezone) : $date;
return false !== $timezone ? $date->setTimezone($timezone) : $date;
}
if ($date instanceof DateTime || $date instanceof DateTimeInterface) {
$date = clone $date;
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
$date->setTimezone($timezone);
}
return $date;
@@ -534,9 +534,9 @@ function twig_date_converter(Twig_Environment $env, $date = null, $timezone = nu
$date = '@'.$date;
}
$date = new DateTime($date, $defaultTimezone);
$date = new DateTime($date, $env->getExtension('core')->getTimezone());
if (false !== $timezone) {
$date->setTimezone($defaultTimezone);
$date->setTimezone($timezone);
}
return $date;