Laravel Carbon как изменить часовой пояс без изменения часового пояса



Я пытаюсь найти обходной путь для преобразования даты-времени, хранящегося в моей базе данных, в "гггг-ММ-ДД чч-мм-СС" и присвоить ему часовой пояс "America/Los_Angeles".



Если я изменю часовой пояс, Carbon автоматически вычтет 7 часов из времени, что происходит при изменении времени с UTC на PST, но время в моей БД установлено для времени PST. Например, я хочу, чтобы время было 10 утра сегодня, но если я изменю часовой пояс, углерод преобразует его в 3 утра сегодня.



Как я могу сделать это, когда часовой пояс меняется на PST, но все еще сохраняет время в 10 утра? Мне нужен часовой пояс для вызова API, вот почему мне нужно это выяснить.

1029   2  

2 ответов:

Хорошо, я придумал тупой, но функциональный способ делать то, что я хотел, и он работает.

Вот мой код:

      $dt = Carbon::parse($request->ShootDateTime)->timezone('America/Los_Angeles');
      $toDay = $dt->format('d');
      $toMonth = $dt->format('m');
      $toYear = $dt->format('Y');
      $dateUTC = Carbon::createFromDate($toYear, $toMonth, $toDay, 'UTC');
      $datePST = Carbon::createFromDate($toYear, $toMonth, $toDay, 'America/Los_Angeles');
      $difference = $dateUTC->diffInHours($datePST);
      $date = $dt->addHours($difference);

Я получаю время, которое я хотел преобразовать в часовой пояс, разбираю его и изменяю часовой пояс. Затем я получаю день, месяц и год и создаю 2 разные даты, обе будут читаться как 00:00:00 по времени, но поскольку они разделены на 7 часов в этом случае, они могут быть только 00:00:00, если они отличаются на 7 часов, что я и делаю далее. Затем наконец, я беру начальное время и добавляю к нему разницу, давая мне нужное время в нужном часовом поясе.

Это некрасиво, но это работает.

Лучшим и более простым способом было бы:

$carbon = new Carbon('YYYY-MM-DD HH:II:SS', 'America/Los_Angeles');
Примечание: не забудьте добавить зависимость use \Carbon\Carbon;.

Comments

    Ничего не найдено.