Я не уверен, что вы думаете, что date_default_timezone_set должен делать здесь, но он не собирается изменять часовой пояс экземпляра DateTime или Carbon, он будет просто по умолчанию, если он не был предоставлен.
date_default_timezone_set('UTC');
// -03:00 (provided via offset in date format)
$dateWithOffset = Carbon::parse('2018-09-04T19:12:34-03:00'); // -03:00
// -04:00 (provided via timezone parameter)
$dateWithTZ = Carbon::parse('2018-09-04T19:12:34', 'America/New_York');
// 00:00 (this is the only one affected by the default setting since no offset or timezone was provided)
$dateWithoutOffset = Carbon::parse('2018-09-04T19:12:34');
Эти 3 экземпляра будут выводить одинаковые числа, если использовать методы формата или toDateTimeString. Ни один из них не изменит часовой пояс при выводе.
Если вы хотите вывести временную метку UTC, используйте метод setTimezone, чтобы преобразовать часовой пояс других экземпляров перед выводом.
$dateWithOffset->setTimezone('UTC')->toDateTimeString()