我想在Symfony2应用程序中使用Twig显示日期时间时想出一个奇怪的时区问题,并且在尝试显示日期时间时,我在我的一个Twig模板上看到了一些问题。
首先,我检查了错误配置的所有内容:
setTimezone()
方法。date_default_timezone_get()
返回' America / New_York',来自网络和CLI。在MySQL中,我的实体已审核的数据为2015-07-08 11:16:00
。
在我的一个Twig模板中,我打电话:
{{ entity.reviewedAt|date('m/d/Y h:i a') }}
07/08/2015 @ 05:16 pm 。{{ entity.reviewedAt|date('m/d/Y h:i a', false) }}
07/08/2015 @ 11:16 am 。 false
参数告诉Twig use the timezone of the datetime object passed to the date filter。
当我使用{{ dump(entity.reviewedAt) }}
调试时,我得到:
object(DateTime)[879]
public 'date' => string '2015-07-08 11:16:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/New_York' (length=16)
来自控制器的 var_dump($entity-getReviewedAt())
返回与{{ dump(entity.reviewedAt) }}
;
这只发生在一个模板上。我网站上的其他模板使用date()
过滤器显示同一字段,没有问题。
为什么,当datetime对象已经与php.ini中的默认设置具有相同的时区时,我是否必须传递false
参数?
我的实体是instance
的孩子,其releaseDate
。在MySQL中,此releaseDate存储为2015-07-02 00:00:00
。
当我使用{{ entity.instance.releaseDate|date('m/d/Y h:i a') }}
在相同模板中显示发布日期时,我会 07/02/2015 @ 12:00 am 。
因此,此属性正确显示,而不传递false
作为第二个参数。但当我做{{ dump(entity.instance.releaseDate) }}
时,我得到了:
object(DateTime)[5518]
public 'date' => string '2015-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'Europe/Copenhagen' (length=17)
我确信哥本哈根是一个美好的城市,但为什么我的约会时间到了那个?
如果我从控制器拨打var_dump($entity->getInstance()->getReleaseDate())
,我会:
object(DateTime)[1592]
public 'date' => string '2015-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/New_York' (length=16)
仅当我从控制器var_dump()
拨打{{ entity.instance.releaseDate|date('m/d/Y h:i a') }}
时显示 07/02/2015 @ 06:00 am 和{{1显示:
{{ dump(entity.instance.releaseDate) }}
什么。的。哎呀?为什么Twig将时区显示为欧洲/哥本哈根,当我从控制器调用object(DateTime)[1592]
public 'date' => string '2015-07-02 00:00:00.000000' (length=26)
public 'timezone_type' => int 3
public 'timezone' => string 'America/New_York' (length=16)
时,为什么会回到America / New_York?
这可能与Doctrine2加载的代理类有关吗?当我var_dump()
时,我确实看到该实例是一个Doctrine代理对象。