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