仅以UTC格式存储Doctrine2 DateTime

时间:2012-06-08 20:19:07

标签: datetime timezone doctrine-orm

有类似的问题,但我找不到任何与Doctrine2配置有关的内容,所以这里有...

我已经读过这个描述Doctrine2时区的页面,我只想澄清一下,因为目前还不清楚如何实际使用它:http://doctrine-orm.readthedocs.org/en/latest/cookbook/working-with-datetime.html

我希望以UTC格式存储日期时间,以便每个用户可以根据其位置拥有关联的时区,但数据通常会存储。

基本上,数据是商店的营业时间(例如,上午9点开放,下午6点关闭)。商店将跟踪其时区,因此当商店中的人设置“开放”时间时,他们正在处理商店的时区,时间转换为UTC并存储在数据库中。接下来,当其他用户查看商店营业时间时,他们将在自己的时区或商店时区中看到营业时间。这应该没关系,因为我有UTC时间,所以我可以将它们转换为任何时区。

所以Doctrine文档显示了这个例子:

class UTCDateTimeType extends DateTimeType
{
// ...
}

但它没有说明如何使用它。我是否必须将列声明为“UTCDateTime”而不是“DateTime”?这个类需要在哪里生活,以便Doctrine知道该类型存在?

2 个答案:

答案 0 :(得分:18)

我刚发现这篇关于Timestampable行为的帖子的一部分似乎是一个更简单的解决方案:

config.yml

doctrine:
    dbal:
        types: 
            datetime: Acme\DoctrineExtensions\DBAL\Types\UTCDateTimeType

答案 1 :(得分:0)

您需要在Doctrine bootstrap中注册类型,并在映射中使用UTCDateTime。这是一篇博文,解释了如何做:http://symfony2.ylly.fr/add-new-data-type-in-doctrine-2-in-symfony-2-jordscream/