如何使用 Symfony 翻译和 ICU 消息格式设置时区?

问题描述 投票:0回答:1

我将所有日期都以 UTC 形式存储在数据库中。但我想在用户时区显示它们。

$mydate = new \DateTime('2024-08-07 12:00:00');

使用像

{{ mydate|date('d.m.Y H:i:s', 'Europe/Berlin') }}
这样的日期过滤器在Twig中显示日期可以按预期工作并显示
07.08.2024 14:00:00

但是当我将翻译功能与 ICU 消息格式结合使用时,我不知道如何设置显示日期所需的时区。

我正在使用 ICU 消息格式,如 https://symfony.com/doc/current/reference/formats/message_format.html#date-and-time 中所述。以下是我的应用程序的示例消息。

my_message: the date and time is {mydate, date} {mydate, time, full}
<div>{{ my_message|trans({mydate: mydate}) }}</div>
<!-- my locale is DE -->
<div>07.08.2024 12:00:00 Koordinierte Weltzeit Uhr</div>

如果我设置

date_default_timezone_set('Europe/Berlin')
,翻译的输出与以前相同。但是因为我告诉 PHP 我的所有日期都应该有一个默认时区
Europe/Berlin
,所以树枝过滤器显示也显示相同的数据。因为它将
Europe/Berlin
转换为
Europe/Berlin
,因此显示
12:00:00
而不是
14:00:00

symfony timezone twig intl
1个回答
0
投票

对于 PHP 的

DateTime
,时区是
DateTime
对象本身的属性。 因此,您应该在创建
$mydate
变量时设置时区,然后在 before 渲染它以与 ICU 消息一起显示。 换句话说,时区不是显示格式的一部分,而是底层数据的一部分。

既然您说您的数据采用UTC格式,那么您可以在加载数据后从UTC转换为所需的时区。 这里有一些关于如何做到这一点的示例。

© www.soinside.com 2019 - 2024. All rights reserved.