Изменить часовой пояс с помощью углерода

У меня есть дата из базы данных (введите дату):

      2018-08-25

Эта дата находится во французском часовом поясе.

Когда я делаю:

          $from = Carbon::parse("2018-08-25", 'Europe/Paris');
    $from->timezone('UTC');
    dd($from);

Я получил:

        date: 2018-08-24 22:00:00.0 UTC (+00:00)

Что я хочу

Но когда я использую поле из БД:

          $operation = Operation::findOrFail($request->operation);
    $from = Carbon::parse($operation->date_ini, 'Europe/Paris');
    $from->timezone('UTC');
    dd($from);

Я получил:

      date: 2018-08-25 00:00:00.0 UTC (+00:00)

В моей БД поле сохраняется как: 2018-08-25, так буквально, это означает 2018-08-25 UTC. Так что результат внятный. Но я не знаю, как с этим справиться, чтобы получить то, что хочу. Подразумевается, что я должен хранить свою дату как datetime в БД, чтобы я мог сохранить ее в UTC на 1 или 2 часа меньше. Есть ли способ избежать этого и сохранить простоту?

Любая идея ?

2 ответа

Если вы вызовете setTimezone() в существующем экземпляре Carbon, он изменит дату / время на новый часовой пояс, например

      $changeTimeZone =  \Carbon\Carbon::parse($operation->date_ini)->setTimezone('Asia/Dhaka')->format('H:i');

Я решил это, используя:

      $from = Carbon::parse($operation->date_ini)->shiftTimezone('Europe/Paris');;

shiftTimezoneс изменением часового пояса без изменения даты. Итак, это помогло мне!

Другие вопросы по тегам