首页 文章

Symfony3 Doctrine使用时区

提问于
浏览
0

我刚刚将Symfony2.4项目迁移到Symfony3.0,我面临着一个奇怪的情况 .

项目的默认时区是UTC,所有内容都作为UTC时间戳存储在MYSQL数据库中 .

我检索一个名为'checkOut'的日期时间字段的条目,将其传递给twig模板:

<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 回答

  • 3

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

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

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

相关问题