Подтвердить что ты не робот

Время PHP() возвращает отметку времени GMT/UTC?

Я просто хочу проверить, возвращает ли time() метку времени UTC/GMT или мне нужно использовать date_default_timezone_set()?

4b9b3361

Ответ 1

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       ???

(не для масштабирования)

Абсолютная точка на этой строке может быть выражена как:

  • 1296096875
  • Январе 27 2011 02:54:35 Европа/Лондон

Оба формата выражают один и тот же абсолютный момент времени в разных обозначениях. Первый - это простой счетчик, который начал здесь примерно:

                          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 года в Лондоне, Европа", наконец, окончательно однозначная абсолютная точка на этой линии, потому что есть только один момент времени, когда это было правдой.

Таким образом, временные интервалы являются "модификатором" "часов настенных часов", которые необходимы для выражения уникального абсолютного момента времени с использованием календаря и часовой/минутной/второй нотации. Без часового пояса отметка времени в таком формате неоднозначна, потому что часы были поражены 02:54:35 27 января 2011 года во всех странах мира в разное время.

Временная метка UNIX по своей сути не имеет этой проблемы.


Чтобы преобразовать из отметки времени UNIX в человекообразное время настенных часов, вам нужно указать, какой часовой пояс вам нужен, чтобы время отображалось. Чтобы преобразовать время настенных часов в временную метку UNIX, вам нужно знать, какой часовой пояс, который время настенных часов должно быть включено. Вы должны либо включать часовой пояс каждый раз с каждым таким преобразованием, либо устанавливать часовой пояс по умолчанию для использования с date_default_timezone_set.

Ответ 2

Начиная с PHP 5.1.0 (когда функции даты/времени были переписаны), каждый вызов функции даты/времени будет генерировать E_NOTICE, если часовой пояс недействительна и/или сообщение E_WARNING при использовании системных настроек или переменной окружения TZ.

Итак, чтобы получить временную метку UTC, вы должны проверить, что текущий часовой пояс и работать с этим или, просто используйте:

$utc_str = gmdate("M d Y H:i:s", time());
$utc = strtotime($utc_str);

Ответ 3

http://us3.php.net/time

"Возвращает текущее время, измеренное в секундах, начиная с эпохи Unix (1 января 1970 года 00:00:00 GMT).

Итак, я верю, что ответ на ваш вопрос - да.

Ответ 4

Из документация

Возвращает текущее время, измеренное в секундах, начиная с эпохи Unix (1 января 1970 года 00:00:00 GMT).