Я понимаю, что этот вопрос очень старый, но я нашел другой вариант, который может быть полезен.Вместо того, чтобы устанавливать и затем возвращать часовой пояс php, вы можете указать часовой пояс как часть строки, передаваемой в strtotime, следующим образом:
echo date_default_timezone_get();
output: America/Chicago
echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39'));
output: 2011-10-28 01:23:39
echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 America/Chicago'));
output: 2011-10-28 01:23:39
echo gmdate('Y-m-d H:i:s', strtotime('2011-10-27T20:23:39 UTC'));
output 2011-10-27 20:23:39
Примечание: я нахожусь на PHP 5.5.9, но это должноработать в любой версии PHP.