Primeiro, você precisa instanciar o objeto datetime com o fuso horário original. Então, depois que o objeto datetime for instanciado, ajuste o fuso horário com
DateTime::setTimezone()
. Veja este código, onde usei
Asia/Hong_Kong
como um exemplo de fuso horário GMT+8:$time = "2012-11-07 15:05:26"; // fetch from database
$date = new DateTime($time,new DateTimeZone('Asia/Hong_Kong'));
$date->setTimezone(new DateTimeZone('Europe/Berlin'));
echo $date->format('Y-m-d H:i:s'); // yields 2012-11-07 08:05:26
Se todas as datas originais forem sempre consistentemente significadas como GMT+8, e seu aplicativo PHP estiver configurado para usar GMT+8 também (definido com
date_default_timezone_set()
, por exemplo), não há necessidade de passar o DateTimeZone
inicial objeto, como DateTime
recém-criado objetos serão criados automaticamente com esse fuso horário.