echo date('O'); // +0300
echo date('P'); // +03:00
есть еще смещение в секундах date('Z'), но выводится без знака +. Можно использовать sprintf для форматирования например:
echo sprintf('GMT%+d', date('Z') / 3600); // GMT+3
P.S. Последний вариант не совсем верный, т.к. он показывает целые числа, хотя есть страны у которых GMT отличается на полчаса/четверь. Например, Австралия (UTC+10:30 — остров Лорд-Хау) и Новая Зеландия (UTC+12:45 — Архипелаг Чатем) и
много других. Так что предпочительней и правильней юзать date('O') или date('P').