Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在细枝日期筛选器中使用时区?_Php_Datetime_Timezone_Datetime Format_Twig - Fatal编程技术网

Php 如何在细枝日期筛选器中使用时区?

Php 如何在细枝日期筛选器中使用时区?,php,datetime,timezone,datetime-format,twig,Php,Datetime,Timezone,Datetime Format,Twig,我正在使用细枝和这个日期过滤器 显然,他们在寻找参数中的DateTime实例 看看这个 我很难理解php datetime对象以及如何使用时区 鉴于我了解基本的PHP,并且熟悉简单的web编程,我如何使用它来使用细枝日期过滤器显示日期和时间,同时适应时区 如果有一种更简单的方法可以在使用日期过滤器时执行,但不使用datetime对象,那么我愿意使用它 我只关心解决方案是否有效,而不是解决方案的“正确性”或“优雅性”。我认为您可能误读了文档 日期筛选器接受DateTime和DateTime实例支

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

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

看看这个

我很难理解php datetime对象以及如何使用时区

鉴于我了解基本的PHP,并且熟悉简单的web编程,我如何使用它来使用细枝日期过滤器显示日期和时间,同时适应时区

如果有一种更简单的方法可以在使用日期过滤器时执行,但不使用datetime对象,那么我愿意使用它


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

我认为您可能误读了文档

日期筛选器接受DateTime和DateTime实例支持的任何日期格式

这意味着您可以只传入诸如“
2011-01-20 12:00:00
实时对象之类的内容

但是如果你不想,你不必处理这个对象

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

$x = new DateTime("2010-01-01 12:00:00");
$x->setTimezone(new DateTimeZone("The Timezone you need"));
// pass to 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") }}
有关更多信息:

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

twig:
    date:
        timezone: Asia/Tokyo

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

如果将datetime对象传递给带有时区的日期筛选器,则可以将false作为日期筛选器中的第二个参数传递

{{ dateForSomething | date('theFormatIWant', false) }}
请参阅文件
对我有效的方法是添加一个新的过滤器,因此它总是查看DateTime对象中的时区。 下面的示例使用DateTime对象作为参数

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

在过滤器扩展中:

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


我成功地做到了您所说的,但它仍然显示了我存储在数据库中的原始日期时间值。请告知。$x=新日期时间(“2010-01-01 12:00:00”)$x->设置时区(“亚洲/新加坡”);//在+8中,假设原始日期时间为UTC格式。试着在应用程序中设置它,只是想添加一点注意事项,在我的例子中,我必须执行$x->setTimezone(newDateTimeZone(“Australia/Perth”);注意“new DateTimeZone()”()这将全局设置时区。这个答案对我帮助很大。谢谢
public function dateTzFilter(\DateTime $dateTime)
{
    return $datTime->format('desired_format');
}