我有一个使用Symfony2和Doctrine构建的API。
日期存储在没有时区修饰符的数据库中(例如+0000
)。
但是,Doctrine的->findAll()
方法返回附加了时区修饰符的日期。我如何确保不会发生这种情况?将此添加到实体注释?或者也许创建一个事件监听器来修改数据(虽然看起来可能对我来说有点麻烦),还是有另一种方法可以做到这一点?
由于
答案 0 :(得分:1)
Doctrine将date
和datetime
列保存为标准的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