Время в PHP, смещение от GMT, UTC

Для начала разберемся что такое GMT и UTC.  Во многих источниках они упоминаются как синонимы, и между ними действительно не существенная разница (до 1 секунды).

Их отличие в методике получения точного значения. UTC (универсальное координированное время) измеряется благодаря высокоточным атомным часам. GMT (Время гринвичского или нулевого меридиана) получают благодаря астрономическим расчетам. При этом UTC периодически подгоняют, чтобы расхождение с GMT составляло не более секунды.

Для бытовых целей это расхождение не важно и потому UTC и GMT можно использовать как одно и тоже число.

Время, используемое в PHP

Если речь идет о функции time(), то она возвращает так называемый UNIX_TIMESTAMP, время в секундах с 1 Января 1970 года для нулевого меридиана (т.е не зависит от установленного часового пояса).

А как работает ф-ция date()? Какое время возвращает «по умолчанию»? Для какого часового пояса?

Установка по умолчанию часового пояса выполняется в файле php.ini. Например, здесь установлен часовой пояс Лос Анджелеса:

Но если настройки не менялись после установки PHP, то обычно вы там обнаружите UTC, что соответствует часовому поясу GMT:

В программе, вы можете установить нужный вам часовой пояс. Это можно сделать вот так:

или так:

Если используется второй способ, то он устанавливает приоритетное значение часового пояса для функций времени в PHP.

Функция date(), показывает время именно для того часового пояса, который установлен в текущий момент в настройках или date_default_timezone_set().

Как узнать разницу времени между локальным часовым поясом и GMT?

Мы разобрались, что date() показывает время для выбранного часового пояса. Разницу времени локального времени (LT) от GMT и текущий код часового пояса можно получить с помощью соответствующих ключей функции. Рассмотрим следующий пример.

Т.е. ключи выводят

Z — разницу в секундах, при этом пояса западнее GMT дают отрицательные значения, а восточнее — положительные;
e — идентификатор часового пояса (появился в PHP 5.1);
P — разница с GMT в часах и минутах (появился в PHP 5.1.3),
T — аббревиатура часового пояса.

Есть и другие ключи, все они перечислены в документации функции date().

Кстати, довольно скоро (19 января 2038) для хранения времени в таком формате уже не будет хватать 32 битного целого числа со знаком. Вполне возможно, что 32 битных приложений уже к тому времени не останется, так что проблемы переполнения не возникнет. 64х-битной переменной уже должно хватить на 292 млрд. лет. Можно уже сейчас проектировать базы данных с учетом этого факта.

Мало букафф? Читайте есчо !

Восстанавливаем объект из состояния __PHP_Incomplete_Class_Name

Декабрь 13, 2014 г.

Объект класса "__PHP_Incomplete_Class" с дополнительным свойством __PHP_Incomplete_Class_Name => 'имя класса' появляется, когда PHP не удается найти объявление класса при операции десериализации объекта. К примеру, такое может происходить при хранении ...

Читать

Читаем курсы валют, реализация для drupal

Декабрь 5, 2012 г.

Как я писал ранее, хороший информ-сервис, это не куча вариантов виджетов для вашего сайта, а, в наиболее ценном случае, возможность грузить данные информ-сервиса в виде xml. В развитом случае, это целый API для разработчика, с возможностью выборки данных ...

Читать

Работа с html select в режиме multiple, отличия от обычного режима

Июнь 9, 2017 г.

HTML select с флагом multiple позволяет сделать выбор нескольких значений. В этой статье мы рассмотрим как правильно обработать данные, используя javascript ...

Читать

Импорт материалов из Instagram

Август 27, 2018 г.

У instagram есть API, который устареет до конца 2018 года. Всех пересаживают на новую платформу -  Instagram Graph API. Регистрация приложения на этой ...

Читать
 

Комментарии к «Время в PHP, смещение от GMT, UTC»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий:

Много комментариев в “Время в PHP, смещение от GMT, UTC”

  1. Грузовые шины:

    Когда отображаете время, всегда включайте в него смещение часового пояса. Формат времени без смещения бесполезен.

  2. Vasia:

    Каким образом часовой пояс влияет на значение, возвращаемое time()? В документации в комментариях справедливо пишут, что timestamp не зависит от часового пояса…

    • Спасибо, Василий, там была ошибка, вместо функции time() конечно же подразумевалась функция date(). Это видно в приводимых примерах.