Os fusos horários em PHP são bastante fáceis

// It's best to specify what format your dates are in:
const DATE_FORMAT = 'Y-m-d H:i:s';

// Always keep PHP in UTC time.
// Better yet to specify it in php.ini.
date_default_timezone_set
('UTC');

// But know what timezone data is being entered in:
$date
= DateTime::createFromFormat(
DATE_FORMAT
,
'1986-08-18 02:19:00',
new DateTimeZone('Australia/Adelaide')
);

// And know what timezone data is being displayed in:
$date
->setTimezone(
new DateTimeZone('America/Detroit')
);

// And everything will work out fine...
echo $date
->format(DATE_FORMAT);
// >> 1986-08-17 12:49:00