4

我正在使用 Twig 和这个日期过滤器

http://www.twig-project.org/doc/templates.html#date

显然他们正在寻找参数中的 DateTime 实例。

看着这个 http://www.php.net/manual/en/datetime.construct.php

我无法理解 php datetime 对象以及如何使用时区。

鉴于我了解基本的 PHP 并且熟悉简单的 Web 编程,我如何使用 Twig 日期过滤器来显示日期和时间,同时满足时区的需求?

如果在使用日期过滤器时有更简单的方法,但不使用日期时间对象,我会接受它。

我只关心解决方案是否有效,而不是解决方案的“正确性”或“优雅性”。

4

5 回答 5

22

Twig 的“日期”过滤器接受第二个参数:“时区”。

因此,您可以轻松显示所需的所有时区。例如:

{{ "now"|date("m/d/Y H:i", "Europe/Paris") }}
{{ "now"|date("m/d/Y H:i", "Asia/Calcutta") }}
{{ "now"|date("m/d/Y H:i", "Europe/Berlin") }}

欲了解更多信息: http ://twig.sensiolabs.org/doc/filters/date.html#timezone

于 2013-07-25T15:42:04.490 回答
7

在今天的版本中,它已在 symfony 应用程序配置文件中得到支持:

twig:
    date:
        timezone: Asia/Tokyo

http://symfony.com/blog/new-in-symfony-2-7-default-date-and-number-format-configuration

于 2017-05-01T16:44:38.340 回答
4

我知道这个问题很老,但这仅供参考。默认情况下,Twig 将使用在 php ini 文件或全局应用程序中设置的默认时区,或在 twig 中声明的默认时区。

如果您使用 timezone 将 datetime 对象传递给日期过滤器,那么您可以将 false 作为日期过滤器中的第二个参数传递。

{{ dateForSomething | date('theFormatIWant', false) }}

请参考文档 树枝日期

于 2018-04-19T17:08:58.363 回答
3

我认为您可能误读了文档。

日期过滤器接受 DateTime 和 DateTime 实例支持的任何日期格式。

这意味着您可以只传递诸如“ 2011-01-20 12:00:00真正的 DateTime 对象之类的东西。

但是,如果您不想做,则不必处理该对象。

现在,如果您需要将该字符串显示在特定的时区中,我将在 php 中设置该时区,然后再将其传递给 twig

$x = new DateTime("2010-01-01 12:00:00");
$x->setTimezone(new DateTimeZone("The Timezone you need"));
// pass to twig
于 2011-03-31T09:40:24.257 回答
0

对我有用的是添加一个新过滤器,因此它始终查看 DateTime obj 中的时区。下面的示例以 DateTime 对象作为参数。

我不明白为什么 Twig 忽略 DateTime 时区部分并使用默认的全局部分,我可能会遗漏一些东西。

在过滤器扩展中:

public function getFilters()
{
    return array(
    (...)
    new \Twig_SimpleFilter('date_tz', array($this, 'dateTzFilter')),
    );
}

public function dateTzFilter(\DateTime $dateTime)
{
    return $datTime->format('desired_format');
}
于 2018-08-03T10:42:41.880 回答