использование углерода для изменения UTC в другой часовой пояс дает тот же результат - PullRequest
0 голосов
/ 16 января 2019

В моем БД время сохраняется как utc.

Я пытаюсь использовать углерод (не обязательно углерод) и изменить его на другой часовой пояс, такой как тихоокеанский часовой пояс или Америка / Ванкувер, при передаче данных во внешний интерфейс. Я хочу, чтобы в БД был UTC, который был бы более гибким в будущем.

Но почему-то я получаю тот же результат, когда использую углерод

$tz = $tt->created_at;  // "2019-01-16 18:21:31"
$date = Carbon::createFromFormat('Y-m-d H:i:s', $tz, 'America/Vancouver');
dd($tz, $date);

$date дает мне результат

Carbon @1547691691 {#212
  date: 2019-01-16 18:21:31.0 America/Vancouver (-08:00)
}

когда я делаю dd($tz, $date->toDateTimeString());

Я получаю

"2019-01-16 18:21:31"  // $tz
"2019-01-16 18:21:31"  // $date->toDateTimeString()

не должно $date->toDateTimeString() быть "2019-01-16 10:21:31", потому что время -08: 00?

Может кто-нибудь подсказать мне, что я здесь сделал неправильно?

Заранее спасибо.

1 Ответ

0 голосов
/ 16 января 2019

Когда вы используете createFromFormat, вы создаете углеродный объект, как вы можете прочитать в документации с 2019-01-16 18: 21: 31 DateTime в Америке / Ванкувере часовом поясе

Но то, что вы на самом деле хотите сделать, - это преобразовать ваше время UTC в время Америки / Ванкувера.

Вам следует создать DateTime с часовым поясом UTC

$tz = $tt->created_at;  // "2019-01-16 18:21:31" (UTC Time)
$date = Carbon::createFromFormat('Y-m-d H:i:s', $tz, 'UTC');

Таким образом, ваш объект DateTime находится в UTC , как ваша база данных, а затем преобразует его в Америка / Ванкувер время

$date->setTimezone('America/Vancouver'); // "2019-01-16 10:21:31" (America/Vancouver Time)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...