Symfony3 Doctrine使用时区

时间:2016-09-27 11:01:13

标签: php mysql datetime doctrine-orm symfony

我刚刚将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中正常工作。任何人都可以解释问题是什么,我该如何解决它?

1 个答案:

答案 0 :(得分:3)

这是因为您正在更改服务器的默认时区,而不是更改有问题的DateTime实例的时区。我的一个宠物讨厌!

我不熟悉树枝,但做这样的事情会给你预期的结果: -

<p>{{ dump(entity.checkOut) }}</p>
<p>{{ dump(entity.checkOut.setTimeZone(new \DateTimeZone("Asia/Jakarta"))) }}</p>
<p>{{ dump(entity.checkOut.getTimestamp()) }}</p>