我刚刚将Symfony2.4项目迁移到Symfony3.0,我面临着一个奇怪的情况。
项目的默认时区是UTC,所有内容都作为UTC时间戳存储在MYSQL数据库中。
我检索一个名为'checkOut'的日期时间字段的条目,将其传递给树枝模板:
<p>{{ dump(entity.checkOut) }}</p>
<p>{{ dump(entity.checkOut.getTimestamp()) }}</p>
我得到了:
DateTime {#585 ▼
+"date": "2016-09-17 10:46:00.000000"
+"timezone_type": 3
+"timezone": "UTC"
}
1474109160
这是正确的。
但我的应用应支持来自不同时区的用户。所以我存储用户首选时区并使用事件监听器来设置它
date_default_timezone_set($this->token_storage->getToken()->getUser()->getTimezone());
之后显示相同的条目:
DateTime {#585 ▼
+"date": "2016-09-17 10:46:00.000000"
+"timezone_type": 3
+"timezone": "Asia/Jakarta"
}
1474083960
这显然是错误的,因为时间戳现在不同了。我希望如此:
DateTime {#585 ▼
+"date": "2016-09-17 17:46:00.000000"
+"timezone_type": 3
+"timezone": "Asia/Jakarta"
}
1474109160
这曾经在sf2.4中正常工作。任何人都可以解释问题是什么,我该如何解决它?
答案 0 :(得分:3)
这是因为您正在更改服务器的默认时区,而不是更改有问题的DateTime实例的时区。我的一个宠物讨厌!
我不熟悉树枝,但做这样的事情会给你预期的结果: -
<p>{{ dump(entity.checkOut) }}</p>
<p>{{ dump(entity.checkOut.setTimeZone(new \DateTimeZone("Asia/Jakarta"))) }}</p>
<p>{{ dump(entity.checkOut.getTimestamp()) }}</p>