Функция PHP date () игнорирует параметр отметки времени - PullRequest
0 голосов
/ 15 февраля 2011

Здесь можно увидеть вывод следующей программы: http://codepad.org/egNGJBUL

<?php

/* Checking if time() is really timezone independent */

date_default_timezone_set('UTC');
echo time();
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo time();
echo "\n";

/* Using date() function passing timestamp parameter */

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s',time());
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo date('Y-m-d H:i:s',time());
echo "\n";


/* Using date() function without passing timestamp parameter */

date_default_timezone_set('UTC');
echo date('Y-m-d H:i:s');
echo "\n";
date_default_timezone_set('Australia/Queensland');
echo date('Y-m-d H:i:s');
echo "\n";

Из строки 1-2 вывода видно, что time() возвращает значение, которое действительно не зависит от часового пояса.

В строке 3-4 странно, что функция date() игнорирует параметр метки времени и по-прежнему отображает дату и время в соответствии с установленным часовым поясом.

Почему это так?

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Не совсем уверен, что вы ожидаете увидеть, но да, выглядит для меня очень нормально.

Метка времени - это целое число, отсчитываемое с определенного момента времени (обычно UNIX EPOCH ).В то время как отображение этого значения не зависит от часового пояса, оно не более или менее так, например, значение правильно отформатированной даты, обозначенной часовым поясом, не зависит от часового пояса ...

пример, всеследующие утверждения являются истинными (логически)

1297799809 == 1297799809

2011-02-15 19:56:49 (UTC) == 2011-02-16 05:56:49 (Austria/Queensland)

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

1 голос
/ 15 февраля 2011

Функция date возвращает дату метки времени, рассчитанную для текущего часового пояса, как говорили другие, если ей не передается метка времени, тогда текущее время используется для метки времени, поэтому передача time() такая же, какничего не пропуская.

Однако, что-то вроде $time = time();sleep 5;echo date($format,$time); даст вам дату 5 секунд назад.

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

Часовой пояс UTC - это фактически время, в течение которого вычисляется временная метка, точнее, числосекунд с 00:00 1 января 1970 года по UTC, затем добавляет или вычитает 3600 (60 * 60) секунд из / в метку времени в часе, смещенную от времени UTC, чтобы получить время в текущем установленном часовом поясе.

1 голос
/ 15 февраля 2011

date() функционирует, если второй параметр, если не указан, равен time().

date () Возвращает строку, отформатированную в соответствии с заданной строкой формата, используя данную целочисленную временную метку или текущее время, если временная метка не указана. Другими словами, отметка времени является необязательной и по умолчанию имеет значение time ().

с даты () в руководстве

Так что на самом деле ничто не врождено.

...