2015-10-02 1 views
0

В моей PostgreSQL, то я следующий столбец с именем «создан», который имеет типа метки времени с временной зонойPHP преобразование UTC в местное время

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

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

Я использую PHP библиотеку Carbon, так что я сделал следующее:

$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:

ответ

1

Вы можете сделать это, используя родную PHP без использования углерода:

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

Deza: в моих postgres формат строки - 2015-10-02 09: 09: 35 + 08. Мне нужно преобразовать время tat utc в локальное время. Пример Ur не объясняет xase +08. – madi

+0

Позвольте мне попытаться на благо сомнений :) – madi

+0

Отредактировав ответ, надейтесь, что это имеет смысл. Не уверен, что происходит вокруг часовых поясов, но, надеюсь, вы увидите, как он должен работать – Dezza

0

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

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

Carbon \ Carbon :: createFromFormat ('Y-м-d H: я: s', $ временной метки 'Азия/Сингапур'); Эта строка кода просто выдает ошибку – madi

+0

Можете ли вы поделиться этой ошибкой? – Abbasi

+0

Если у вас возникли проблемы, вы можете ознакомиться с документацией по Carbon здесь: http://carbon.nesbot.com/docs/#api-instantiation – Abbasi

1

Попробуйте это с помощью стандартного 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('Y-m-d H:i:s',$timestamp); 
echo 'local time:['.$localTime.']'; 

результат:

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^