Использование имени региона - это правильный способ описания часового пояса. Использование смещения по Гринвичу само по себе крайне неоднозначно.
Это отражено в вашем вопросе - как вы должны конвертировать смещение GMT -8 в часовой пояс? Ну, это зависит от того, что на самом деле означает «GMT -8». Означает ли это «UTC-8 в любой момент времени» или «UTC-8 в зимнее время и UTC-7 в летнее время»? Если это последнее, когда зима начинается и заканчивается?
Я бы надеялся , что PHP принял хорошо известный набор значений для "фиксированных" (без DST) часовых поясов, например, "Etc / GMT + 3" и т. Д. Но если вы действительно не имеете в виду фиксированный часовой пояс, вам лучше выяснить, о каком регионе вы на самом деле говорите, потому что в противном случае ваши вычисления почти гарантированно окажутся неверными .
Я боролся с часовыми поясами большую часть прошлого года. Это боль - особенно , когда некоторые зоны меняют свои правила для перехода на летнее время (как это сделали США несколько лет назад) или когда некоторые зоны выбирают и выходят из летнего времени, по-видимому, по своему желанию. Попытка отразить все это в одном числе - глупость. Если вас интересует только один момент времени, это может быть хорошо, но в этот момент вы могли бы просто сохранить значение UTC в первую очередь. В противном случае имя является лучшим подходом. (Это не обязательно просто плавание в тот момент, заметьте. Даже имена меняются со временем ...)