Изменить часовой пояс с помощью углерода
У меня есть дата из базы данных (введите дату):
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
с изменением часового пояса без изменения даты. Итак, это помогло мне!