Symfony -JMS Serializer-序列化时将日期时间转换为特定时区



我有一个存储日期时间的实体,我使用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,扩展参考部分

相关内容

  • 没有找到相关文章

最新更新