From 144c4dac7f3a56bf6ecddfb13f4a19f9a2482c10 Mon Sep 17 00:00:00 2001 From: Jonas Elfering Date: Fri, 3 Nov 2023 15:14:20 +0100 Subject: [PATCH] Fix timezone fallback to CoreExtension in IntlExtension This is probably a regression from #3844 --- extra/intl-extra/IntlExtension.php | 2 +- extra/intl-extra/Tests/IntlExtensionTest.php | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/extra/intl-extra/IntlExtension.php b/extra/intl-extra/IntlExtension.php index 3f3c600c48..142d25e10c 100644 --- a/extra/intl-extra/IntlExtension.php +++ b/extra/intl-extra/IntlExtension.php @@ -371,7 +371,7 @@ public function formatDateTime(Environment $env, $date, ?string $dateFormat = 'm $date = twig_date_converter($env, $date, $timezone); $formatterTimezone = $timezone; - if (false === $formatterTimezone) { + if (null === $formatterTimezone) { $formatterTimezone = $date->getTimezone(); } elseif (\is_string($formatterTimezone)) { $formatterTimezone = new \DateTimeZone($timezone); diff --git a/extra/intl-extra/Tests/IntlExtensionTest.php b/extra/intl-extra/Tests/IntlExtensionTest.php index a05f796f91..6afa7036b7 100644 --- a/extra/intl-extra/Tests/IntlExtensionTest.php +++ b/extra/intl-extra/Tests/IntlExtensionTest.php @@ -13,6 +13,7 @@ use PHPUnit\Framework\TestCase; use Twig\Environment; +use Twig\Extension\CoreExtension; use Twig\Extra\Intl\IntlExtension; use Twig\Loader\ArrayLoader; @@ -30,6 +31,20 @@ public function testFormatterWithoutProto() ); } + public function testFormatterWithoutProtoFallsBackToCoreExtensionTimezone() + { + $ext = new IntlExtension(); + $env = new Environment(new ArrayLoader()); + // EET is always +2 without changes for daylight saving time + // so it has a fixed difference to UTC + $env->getExtension(CoreExtension::class)->setTimezone('EET'); + + $this->assertSame( + 'Feb 20, 2020, 3:37:00 PM', + $ext->formatDateTime($env, new \DateTime('2020-02-20T13:37:00+00:00', new \DateTimeZone('UTC'))) + ); + } + public function testFormatterProto() { $dateFormatterProto = new \IntlDateFormatter('fr', \IntlDateFormatter::FULL, \IntlDateFormatter::FULL, new \DateTimeZone('Europe/Paris'));