Symfony - JMS Serializer - преобразовывает дату и время в определенный часовой пояс при сериализации - PullRequest
0 голосов
/ 04 марта 2019

У меня есть объект, который хранит дату и время, и я использую JMSSerializer для возврата этого поля через API:

/**
 * @ORM\Column(type="datetime")
 *
 * @Serializer\Type("DateTime<'d/m - H:i', 'Europe/Paris'>")
 */
private $creationDateTime;

В базу данных creationDateTime сохраняется с часовым поясом UTC.

Изменение формата правильно применяется к ответу API JSON (например, замена «d / m H: i на d / m / YH: i»), но возвращаемое время всегда является сохраненным (UTC).один), а не ожидаемый (Европа / Париж), даже если я установил совершенно другой часовой пояс.

Например, если сохраненное время 15:04, сериализованное время, возвращаемое API, все еще равно 15:04 (UTC), а не ожидаемое (16:04, Европа / Париж).

Можно ли применить часовой пояс к сохраненной дате при сериализации ответа?

Спасибо заadvance.

Я использую: 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;
}

1 Ответ

0 голосов
/ 05 марта 2019

Лучший способ сделать его глобальным - настроить его следующим образом:

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

См. Документ, Справочник по расширениям часть

...