我正在使用Twig和这个日期过滤器
http://www.twig-project.org/doc/templates.html#date
显然他们正在参数中寻找DateTime实例。
查看此http://www.php.net/manual/en/datetime.construct.php
我无法理解php datetime对象以及如何使用时区。
鉴于我了解基本的PHP并熟悉简单的网页编程,如何使用Twig日期过滤器显示日期和时间,同时满足时区要求?
如果在使用日期过滤器时有更简单的方法,但不使用datetime对象,我会对它开放。
我只担心解决方案有效,而不是解决方案的“正确性”或“优雅”。
答案 0 :(得分:17)
Twig的“Date”过滤器接受第二个参数:“timezone”。
因此,您可以轻松显示所需的所有时区。例如:
{{ "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
答案 1 :(得分:2)
我想你可能误读了文档。
日期过滤器接受DateTime和DateTime实例支持的任何日期格式。
这意味着您可以传递“2011-01-20 12:00:00
” OR 等真实的DateTime对象。
但如果你不想这样做,你就不必处理这个对象。
现在,如果您需要该字符串将在特定时区显示,我会在将该时区设置为php之前将其传递给twig
$x = new DateTime("2010-01-01 12:00:00");
$x->setTimezone(new DateTimeZone("The Timezone you need"));
// pass to twig
答案 2 :(得分:2)
在今天的版本中,symfony应用程序配置文件支持它:
twig:
date:
timezone: Asia/Tokyo
http://symfony.com/blog/new-in-symfony-2-7-default-date-and-number-format-configuration
答案 3 :(得分:1)
我知道这个问题已经过时了,但这仅供参考。 默认情况下,Twig将使用在php ini文件中或全局应用程序中设置的默认时区,或者在twig中声明。
如果将datetime对象传递给带有时区的日期过滤器,则可以将false作为日期过滤器中的第二个参数传递。
C++
请参阅文档 twig date
答案 4 :(得分:0)
适合我的代码是
/**
originally the $post['created'] contains the value stored in database.
this value was inserted assuming UTC format.
Best to do something like date_default_timezone_set('UTC');
which sets UTC application-wide
**/
$time = new DateTime($post['created']);
$time->setTimezone(new DateTimeZone('Asia/Singapore')); // if you want Asia/Singapore
// probably the DateTimeZone has to be retrieved from database
// since it could be user setting
// you can find the list of legit DateTimeZones in
// http://www.php.net/manual/en/timezones.php
$post['created'] = $time;
/**
Then $post is passed to Twig
**/
答案 5 :(得分: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');
}