【问题标题】:Storing Doctrine2 DateTime in UTC Only仅在 UTC 中存储 Doctrine2 日期时间
【发布时间】:2012-06-08 20:19:06
【问题描述】:

有类似的问题,但我找不到任何与 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 知道该类型的存在?

【问题讨论】:

    标签: datetime timezone doctrine-orm


    【解决方案1】:

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

    config.yml

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2016-08-07
        • 2013-08-10
        • 1970-01-01
        • 2010-11-23
        • 2011-04-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-06
        相关资源
        最近更新 更多