PHP конвертирует UTC в локальное время

В моем postgresql у меня есть следующий столбец с именем «created», который имеет временную метку типа с часовым поясом

Поэтому я вставил запись в соответствии с форматом, который, как я считаю, является UTC.

2015-10-02 09: 09: 35 + 08

Я использую php Carbon library, поэтому я сделал следующее:

$date = Carbon\Carbon::parse('2015-10-02 09:09:35+08'); echo $date->->toDatetimeString(); //gives result as 2015-10-02 09:09:35 

Как я могу использовать библиотеку для эхо-ответа правильного часового пояса, который включает добавление +8 в вышеуказанный формат даты и времени? Временная зона, которую я использую, – «Азия / Сингапур» .

Время должно быть напечатано на местное время, которое будет 2015-10-02: 17:09:35:

Вы можете сделать это, используя собственный php без использования Carbon:

 $time = '2015-10-02 16:34:00+08'; $date = DateTime::createFromFormat('Ymd H:i:s+O', $time); print $date->format('Ymd H:i:s') . PHP_EOL; $date->setTimeZone(new DateTimeZone('Asia/Singapore')); print $date->format('Ymd H:i:s') . PHP_EOL; $date->setTimeZone(new DateTimeZone('Etc/UTC')); print $date->format('Ymd H:i:s') . PHP_EOL; 

Попробуйте это с помощью стандартного PHP:

 $raw = '2015-10-02 09:09:35+08'; $date = substr($raw,0,19); $tzOffset = (strlen($raw) > 19) ? substr($raw,-3) : 0; $timestamp = strtotime($date) + (60 * 60 * $tzOffset); $localTime = date('Ymd H:i:s',$timestamp); echo 'local time:['.$localTime.']'; 

Результат:

 local time:[2015-10-02 17:09:35] 

Это также будет работать без смещения часового пояса или отрицательного.

Попробуй это:

 $timestamp = '2015-10-02 16:34:00'; $date = Carbon::createFromFormat('Ymd H:i:s', $timestamp, 'Asia/Singapore');