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
. На официальном сайте нашел что-то связанное с миграцией на вторую версию, но мне это не помогло.
Поковырялся немного в 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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP