Как правильно распарсить дату с временными зонами в Laravel?

Голову сломал уже, подскажите. С фронтенда приходит диапазон дат в таком формате.
Для примера у всех выбрано с 1 по 31 мая.

У пользователя из Москвы такие значения:
["2022-04-30T21:00:00.000Z", "2022-05-31T20:59:59.999Z"]


У пользователя из Лос-Анжелеса такие значения:
["2022-05-01T07:00:00.000Z", "2022-06-01T06:59:59.999Z"]


У пользователя из Сиднея такие значения:
["2022-04-30T14:30:00.000Z", "2022-05-31T14:29:59.999Z"]


Подскажите как правильно распарсить это значиние через Carbon на бекенде что бы получить дату
["2022-05-01", "2022-05-31"] ?
А то пользователи обращаясь к серверу из разных часовых поясов получают разные данные.
Заранее благодарен.
  • Вопрос задан
  • 134 просмотра
Решения вопроса 1
neuotq
@neuotq
Прокрастинация
Зачем что-то парсить лишний раз. У вас приходят даты в UTC (Z в конце говорит об этом).
Карбон отлично всё создаёт из этой строки
$tm = Illuminate\Support\Carbon::create('2022-05-01T07:00:00.000Z');
/*
Illuminate\Support\Carbon @1651388400 {#4888
     date: 2022-05-01 07:00:00.0 +00:00,
   }
*/
В базе мы тоже(надеюсь) храним в UTC
<code lang="php">
$tm->setTimeZone('Europe/Moscow');
/*
=> Illuminate\Support\Carbon @1651388400 {#4887
     date: 2022-05-01 10:00:00.0 Europe/Moscow (+03:00),
   }
*/
$tm->setTimeZone('Europe/London');
/*
=> Illuminate\Support\Carbon @1651388400 {#4887
     date: 2022-05-01 08:00:00.0 Europe/London (+01:00),
   }
*/
</code>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы