#4746·Twig

The timezone argument is missing when instantiating from strings other than "now".

Author: julienbornsteinCreated Jan 22, 2026Updated Apr 8, 2026

https://github.com/twigphp/Twig/blob/76c404ec67a6c8dcbb68e82b38a2dc6074c503de/src/Extension/CoreExtension.php#L618

Is there a reason not to pass the timezone as the second argument in that case (unlike previous cases) ? Timezone is set a few lines later but it's not wat we could expect

Let see with an exemple :

Right now it's

  • In Paris: 2026-01-22 it's 05:00 PM in Europe/Paris (+01:00)

  • In London: 2026-01-22 04:00 PM UTC

  • In Sydney: 2026-01-23 03:00 AM Australia/Sydney (+11:00) // Notice it's day +1

    php.ini timezone is set to UTC

Usage in Twig template

twig
{{ "today"|date('Y-m-d', 'Australia/Sydney') }}

Current version result :

php
$today = new \DateTime("today"); // 2026-01-22 00:00:00.0 UTC (+00:00)
$today->setTimezone(new \DateTimeZone('Australia/Sydney')); // 2026-01-22 11:00:00.0 Australia/Sydney (+11:00)
echo $today->format('Y-m-d');
// output 2025-01-22  

Expecting result

php
$today = new \DateTime("today", new \DateTimeZone('Australia/Sydney')); // 2026-01-23 00:00:00.0 Australia/Sydney (+11:00)
echo $today->format('Y-m-d');
// output 2025-01-23  

False positive case

twig
{{ "today"|date('Y-m-d', 'Europe/Paris') }}
php
$today = new \DateTime("today"); // today set time to 00:00:00 (https://www.php.net/manual/en/datetime.formats.php)
$today->setTimezone(new \DateTimeZone('Europe/Paris'));
echo $today->format('Y-m-d');
// output 2025-01-22