TransWikia.com

Некорректное время при конвертации в JSON в Carbon

Stack Overflow на русском Asked by Mark Khromov on December 20, 2021

Всем привет! Столкнулся с проблемой, что из-за часового пояса (в моём случае Московского), неправильно отображается время при конвертации в JSON. У меня есть время, например, 24.07.2020 02:00:00 по Московскому (+3). Если сделать toDateTimeString получается именно это время, всё корректно, но если конвертировать в JSON (toJSON), то выдается на 3 часа меньше, соответственно. Не могу понять куда нужно копать, то ли я уже заработался, то ли баг в Carbon’е.

Воспроизводится просто:

Carbon::now()->toJSON();

Для научного интереса, можно использовать это:

Carbon::now()->toDateTimeString();

Функции, вроде, выполняют примерно одно и тоже, но время разное…

В php.ini время Europe/Moscow, если тянуть из конфига, всё корректно. Функция date_default_timezone_get тоже выдает Europe/Moscow.

Не знаю, стоит ли уточнять, но, на всякий случай. Недавно перешел на Carbon 2. На официальном сайте нашел что-то связанное с миграцией на вторую версию, но мне это не помогло.

One Answer

Поковырялся немного в API Carbon'а. В исходниках встретил следующее:

public function toISOString($keepOffset = false)
{
    if (!$this->isValid()) {
        return null;
    }

    $yearFormat = $this->year < 0 || $this->year > 9999 ? 'YYYYYY' : 'YYYY';
    $tzFormat = $keepOffset ? 'Z' : '[Z]';
    $date = $keepOffset ? $this : $this->copy()->utc();

    return $date->isoFormat("$yearFormat-MM-DD[T]HH:mm:ss.SSSSSS$tzFormat");
}

public function toJSON()
{
    return $this->toISOString();
}

С пометкой Return the ISO-8601 string (ex: 1977-04-22T06:00:00Z) with UTC timezone.. Собственно, вопрос отпадает, если часовой пояс от UTC. Я на клиенте увеличил время на три часа и не стал ковыряться дальше с этой проблемой. Может, кто-то подкинет другое решение, буду рад.

Answered by Mark Khromov on December 20, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP