Symfony 序列化器标准化两次日期

问题描述 投票:0回答:1

当我使用 symfony 6.4 序列化器 6.4.11 时,有些事情很奇怪。我序列化的日期用双引号引起来...我怀疑该值编码了两次,但为什么?

这是代码:

$tmp = $value->format("Y-m-d H:i:s");
$value = $this->getSerializer()
    ->serialize($value, 'json', [DateTimeNormalizer::FORMAT_KEY => "Y-m-d H:i:s"]);

enter image description here

同样的问题,但未指定日期输出格式仅供参考...

知道出了什么问题吗? 谢谢你

symfony
1个回答
0
投票

在第一行代码中,您正确设置了日期格式:

$tmp = $value->format("Y-m-d H:i:s");

但是在第二行代码中,您将原始 DateTime 对象(存储在

$value
变量中)传递给序列化器:

$value = $this->getSerializer()
->serialize($value, 'json', [DateTimeNormalizer::FORMAT_KEY => "Y-m-d H:i:s"]);

这将执行以下操作:

  1. 序列化器将
    DateTime
    对象格式化为字符串格式
    Y-m-d H:i:s
  2. 之后,上述格式化字符串日期将被编码为
    JSON
    。因此它将用双引号引起来。

如果您只想格式化日期,那么您可以简单地执行以下操作:

$date->format("Y-m-d H:i:s");

我不明白你为什么要使用

serialize
方法来进行如此简单的操作。

但是如果你仍然想使用序列化方法,你可以尝试使用关联数组进行序列化,就像这样:

$data = [
    'date' => $value->format("Y-m-d H:i:s"),
    // Other fields...
];

$jsonValue = $this->getSerializer()->serialize($data, 'json');
© www.soinside.com 2019 - 2024. All rights reserved.