Время в 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 млрд. лет. Можно уже сейчас проектировать базы данных с учетом этого факта.

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

Base Auth в PHP

Ноябрь 17, 2022 г.

Рассмотрим здесь вариации с выполнением base auth. Как оказывается из опыта работы с некоторыми API, они не являются эквивалентными. И одна форма запроса может не работать, в то время как другая будет выполняться. Задача следующая - получить содержимое ...

Читать

Проверка кода ИНН на PHP

Сентябрь 23, 2015 г.

В этом году писал реализацию данной функции для проекта C2C-base. Оказывается, бывает ИНН двух видов - для юридических лиц и физ лиц - 10 или 12 знаков соответственно. Проверка большинства подобных кодов осуществляется по контрольным цифрам, содержащимся ...

Читать

Проверка кодов ОГРН / ОГРНИП на PHP

Сентябрь 24, 2015 г.

Продолжая тему валидаторов, публикую код двух функций для проверки введенных пользователем кодов ОГРН или ОГРНИП. Проверка кода ОГРН. Код содержит 13 знаков, последний из них используется для проверки "контрольной суммы". [crayon-698e0b0cbf352256856830/] ...

Читать

Валидатор для JSON строки в PHP

Октябрь 2, 2018 г.

К JSON можно относиться как к одной из разновидностей текстовых форматов передачи данных. Но для PHP это просто ещё одна скалярная строка. Как определить, что перед нами действительно JSON? Чтобы убедиться, придется попытаться декодировать строку. ...

Читать
 

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

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



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

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

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

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

  2. Vasia:

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

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