我有一个存储日期时间的实体,我使用JMSSerializer来通过API返回此字段:
/**
* @ORMColumn(type="datetime")
*
* @SerializerType("DateTime<'d/m - H:i', 'Europe/Paris'>")
*/
private $creationDateTime;
进入数据库,创建dateTime用UTC时区存储。
更改格式正确应用于JSON API响应(例如,替换" D/M H:I BY D/M/Y H:I":I"),但是返回的时间始终是存储的一个(UTC ONE)即使我设置了一个完全不同的时区,也不是预期的(欧洲/巴黎)。
例如,如果存储的时间为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
*
* @SerializerType(
* "DateTime<'d/m/Y H:i'>"
* )
*
* @SerializerGroups({"signals"})
* @SerializerVirtualProperty()
* @SerializerExpose
*/
public function getCreationDateTime(): DateTime
{
$dateTime = $this->creationDateTime;
$dateTime->setTimeZone(new DateTimeZone("Europe/Paris"));
return $dateTime;
}
使其全局的最佳方法是在:
中配置它config> packages> jms_serializer.yaml
这样:
jms_serializer:
handlers:
datetime:
default_format: "Y-m-d\TH:i:sP" # ATOM
default_timezone: "UTC" # defaults to whatever timezone set in php.ini or via date_default_timezone_set
参见DOC,扩展参考部分