Я просто хочу проверить, возвращает ли time()
метку UTC / GMT или мне нужно использовать date_default_timezone_set()
?
time
возвращает time
метку UNIX, которая не зависит от часового пояса. Поскольку временная метка UNIX обозначает секунды с 1970 UTC, вы можете сказать, что это UTC, но на самом деле нет часовой зоны.
Чтобы быть действительно ясным, временная метка UNIX имеет одинаковое значение во всем мире в любой момент времени. На момент написания это 1296096875
в Токио, Лондоне и Нью-Йорке. Чтобы преобразовать это в «человеко читаемое» время, вам нужно указать, какой часовой пояс вы хотите отобразить. 1296096875
в Токио 2011-01-27 11:54:35
, в Лондоне это 2011-01-27 02:54:35
и в Нью-Йорке это 2011-01-26 21:54:35
.
Фактически вы обычно имеете дело с (смесью) этих понятий при обращении:
Визуализируйте время следующим образом:
-------+-------------------+-------+--------+----------------+------> | | | | | Dinosaurs died Jesus born Y2K Mars colonised ???
(не в масштабе)
Абсолютная точка на этой строке может быть выражена как:
Оба формата выражают один и тот же абсолютный момент времени в разных обозначениях. Первый – простой счетчик, который начался здесь примерно следующим образом:
start of UNIX epoch | -------+-------------------+------++--------+----------------+------> | | | | | Dinosaurs died Jesus born Y2K Mars colonised ???
Последний – гораздо более сложный, но столь же действительный и выразительный счетчик, который начался здесь примерно следующим образом:
start of Gregorian calendar | -------+-------------------+-------+--------+----------------+------> | | | | | Dinosaurs died Jesus born Y2K Mars colonised ???
Временные метки UNIX просты. Это счетчик, который начался в один конкретный момент времени и который увеличивается на 1 каждую секунду (для официального определения того, что второе). Представьте, что кто-то в Лондоне начал секундомер в полночь 1 января 1970 года, который все еще работает. Это более или менее точная отметка UNIX. Все используют одно значение этого секундомера.
Время чтения часов на экране человека более сложно, и это еще более осложняется тем, что он сокращен, а части его опущены в повседневном использовании. 02:54:35 означает почти ничего на временной шкале, изображенной выше. 27 января 2011 02:54:35 уже гораздо более конкретный, но все же может означать множество разных точек на этой линии. «Когда часы ударили 02:54:35 27 января 2011 года в Лондоне, Европа теперь, наконец, является однозначным абсолютным пунктом на этой линии, потому что есть только один момент времени, когда это было правдой.
Таким образом, timezones являются «модификатором» «часов настенных часов», которые необходимы для выражения уникального абсолютного момента времени с использованием календаря и часовой / минутной / второй нотации. Без часового пояса отметка времени в таком формате неоднозначна, потому что часы были поражены 02:54:35 27 января 2011 года во всех странах мира в разное время.
Временная метка UNIX по своей сути не имеет этой проблемы.
Чтобы преобразовать из временной отметки UNIX в человекообразное время настенных часов, вам нужно указать, в каком часовом поясе вы хотите отобразить время. Чтобы преобразовать из времени настенных часов в временную метку UNIX, вам нужно знать, какой часовой пояс это время настенных часов должен быть включен. Вы должны либо включать часовой пояс каждый раз с каждым таким преобразованием, либо устанавливать часовой пояс по умолчанию, который будет использоваться с date_default_timezone_set
.
Начиная с PHP 5.1.0 (когда функции даты / времени были переписаны), каждый вызов функции даты / времени генерирует E_NOTICE, если часовой пояс недействителен, и / или сообщение E_WARNING при использовании системных настроек или TZ переменная среды.
Поэтому, чтобы получить временную метку UTC, вы должны проверить, что такое текущий часовой пояс, и отработать это или просто использовать:
$utc_str = gmdate("M d YH:i:s", time()); $utc = strtotime($utc_str);
«Возвращает текущее время, измеренное в течение нескольких секунд после эпохи Unix (1 января 1970 года 00:00:00 GMT)».
Поэтому я считаю, что ответ на ваш вопрос – да.
Из документации
Возвращает текущее время, измеренное в секундах, начиная с эпохи Unix (1 января 1970 года 00:00:00 GMT).