Конструктор DateTimeZone принимает только имя региона:
new DateTimeZone('Europe/London');
И не смещение от UTC:
new DateTimeZone('+01:00'); // Unknown or bad timezone (+01:00)
Тем не менее, можно получить такой DateTimeZone из DateTime :
(new DateTime('2012-12-28T00:00:00+01:00'))->getTimezone()->getName(); // +01:00
Так что это немного странно. Есть ли способ напрямую получить DateTimeZone со смещения?
В дополнение к ответу Рафаля , самый простой способ, который я нашел до сих пор:
DateTime::createFromFormat('O', '+01:00')->getTimezone();
редактировать
Это была ошибка , которая была исправлена в PHP 5.5.10. Теперь это работает!
Проверьте эту функцию.
http://pl1.php.net/manual/en/function.timezone-name-from-abbr.php
Вам нужно будет конвертировать часы в секундах и передать их в качестве второго параметра.
STH. как new DateTimeZone(timezone_name_from_abbr('', 3600, 0))
должен работать.
Я не думаю, что есть предопределенный способ, по которому вы хотите пойти. Но если вы объявите какую-либо глобальную функцию, которая вернет вам дату и время с добавлением смещения, это может вам помочь. Пример :
function getDateTime($format="dd-mm-YY"){ $currDate= date($format); $currDate=date($format,strtotime("+1 day",$currDate); // or whatever needed instead of +1 day }
Современный ответ:
new DateTimeZone('+0100');
Документация: