Symfony2 Doctrine API不返回数据库中的日期(添加时区)

时间:2015-07-23 17:30:29

标签: symfony doctrine-orm

我有一个使用Symfony2和Doctrine构建的API。

日期存储在没有时区修饰符的数据库中(例如+0000)。 但是,Doctrine的->findAll()方法返回附加了时区修饰符的日期。我如何确保不会发生这种情况?将此添加到实体注释?或者也许创建一个事件监听器来修改数据(虽然看起来可能对我来说有点麻烦),还是有另一种方法可以做到这一点?

由于

3 个答案:

答案 0 :(得分:1)

Doctrine将datedatetime列保存为标准的php DateTime对象。

根据http://php.net/manual/en/datetime.construct.php

  

如果省略$ timezone,将使用当前时区。

这意味着即使doctrine在为对象保湿时没有设置时区,也会使用系统的默认时区。这是标准的PHP行为,无法从Doctrine更改。

<强>解决方案:

即使日期是用时区构建的,这也不应该打扰你。使用DateTime的{​​{1}}方法,您可以以任何所需的格式显示日期。

<强> 实施例 要以format()格式显示日期,您可以执行以下操作:

2000-02-01 23:59:59

答案 1 :(得分:1)

坚持->format('Y-m-d H:i:s');返回值对我来说是最干净,最简单的解决方案。

class MyEntity
{
    protected $dateOfBirth;

    public function setDateOfBirth(DateTime $dateOfBirth)
    {
        $this->dateOfBirth = $dateOfBirth;

        return $this;
    }

    public function getDateOfBirth()
    {
        return $this->dateOfBirth->format('Y-m-d H:i:s');
    }
}

答案 2 :(得分:0)

我忘了提到我正在使用FOSRestBundle,所以最后需要将它添加到实体中:

use JMS\Serializer\Annotation\Type;

...

@Type("DateTime<'Y-m-d'>")

感谢您的帮助:Format returning date format on Symfony2 FOSRestBundle