【发布时间】:2019-03-04 16:04:38
【问题描述】:
我有一个存储日期时间的实体,我使用 JMSSerializer 通过 API 返回此字段:
/**
* @ORM\Column(type="datetime")
*
* @Serializer\Type("DateTime<'d/m - H:i', 'Europe/Paris'>")
*/
private $creationDateTime;
到数据库中,creationDateTime 与 UTC 时区一起存储。
更改格式已正确应用于 JSON API 响应(例如,将“d/m H:i 替换为 d/m/Y H:i”),但返回的时间始终是存储的时间(UTC 时间)即使我设置了一个完全不同的时区,也不是预期的(欧洲/巴黎)。
例如,如果存储的时间是 15:04,则 API 返回的序列化时间仍然是 15:04(UTC),而不是预期的时间(16:04,欧洲/巴黎)。
在序列化响应时,有什么方法可以在存储的日期上应用时区?
提前致谢。
我使用: Symfony 4、JMS-SerializerBundle 3.1.0、JMS-Serializer 2.1.0
编辑:
这是我做的,但绝对不是解决这个问题的最佳方法:
/**
* Returns the signal creation date and time
*
* @Serializer\Type(
* "DateTime<'d/m/Y H:i'>"
* )
*
* @Serializer\Groups({"signals"})
* @Serializer\VirtualProperty()
* @Serializer\Expose
*/
public function getCreationDateTime(): \DateTime
{
$dateTime = $this->creationDateTime;
$dateTime->setTimeZone(new \DateTimeZone("Europe/Paris"));
return $dateTime;
}
【问题讨论】:
标签: symfony datetime timezone jmsserializerbundle