@HeBonpoc

Почему в PHP time() возвращает UTC, а date() без параметров учитывает пояс?

$defaultTimeZone = date('e');
	var_dump(time());
	var_dump(date('H'));
	date_default_timezone_set('Europe/Moscow');
	var_dump(time());
	var_dump(date('H'));
	date_default_timezone_set($defaultTimeZone);
	var_dump(time());
	var_dump(date('H'));

Вывод:
int 1409235786
string '14' (length=2)
int 1409235786
string '18' (length=2)
int 1409235786
string '14' (length=2)

Странный вывод с учётом того, что:
string date ( string $format [, int $timestamp = time() ] )

Это баг или косяк документации?
Также вычислил, что strtotime('now') тоже отдаёт UTC, а например strtotime('tomorrow') отдаёт с поправкой.
Каким функциям можно верить?)

UPD:
strtotime('+1 second') тоже отдаёт без поправки. Что же это творится(
  • Вопрос задан
  • 6568 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Творится то что, что нужно еще и комментарии в мануале читать. В частности:
The documentation should have this info. The function time() returns always timestamp that is timezone independent (=UTC).


что логично, так как time обычно применяют для каких-то внутренних механизмов (время жизни кэша и т.д.).

Что до strtotime
will try to parse that format into a Unix timestamp (the number of seconds since January 1 1970 00:00:00 UTC), relative to the timestamp given in now, or the current time if now is not supplied.

Так как отнимать мы будем время в UTC, логично что и текущее время будет спашено в UTC.

Вообще что бы небыло проблем, лучше всегда работать и хранить даты в UTC как формат времени внутри приложения.
Ответ написан
Комментировать
WebSpider
@WebSpider
Функция time возвращает количество секунд, прошедших с начала Эпохи Unix (The Unix Epoch, 1 января 1970 00:00:00 GMT) до текущего времени. (c) PHP.net
Поэтому её вывод не зависит от выбранной временной зоны. Функции же наподобие date, учитывают этот параметр. Точно также как и strtotime('tomorrow') - он выдаёт временную метку начала завтрашнего дня (00:00), а определить это время без зоны невозможно. В то время как время '+1 second' не зависит от зоны. По-моему, всё логично

> Каким функциям можно верить?)
Зависит от того что Вам нужно :)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы