Разные часовые пояса имеют одинаковую временную метку? - PullRequest
2 голосов
/ 07 января 2012

Я запустил этот скрипт:

echo date_default_timezone_get()."\n";
echo "----\n";

date_default_timezone_set('Asia/Kabul');
echo date_default_timezone_get()."\n";
echo "----\n";

echo time()."\n";
$dt = new DateTime;
echo $dt->format('U') . "\n";
echo "----\n";

date_default_timezone_set('UTC');
echo date_default_timezone_get()."\n";
echo "----\n";

echo time()."\n";
$dt = new DateTime;
echo $dt->format('U') . "\n";

и для всех 4 значений меток времени он говорит: 1325905766.

Я где-то читал, что новый DateTime всегда устанавливает UTC как часовой пояс,независимо от настройки часового пояса, я получаю это, но как насчет time()?

За несколько секунд до этого на другом сервере (вероятно, не в Европе (ideone.com)) он возвращает 4 раза: 1325905723.

То же самое!(Очевидно, что разность составляет несколько секунд, но тот же часовой пояс.)

time() всегда и только возвращает UTC ???Что происходит ??

Ответы [ 2 ]

6 голосов
/ 07 января 2012

Да, они оба используют UTC. В частности, как time(), так и формат U возвращают количество секунд без високосности, прошедших с полуночи UTC 1 января 1970 года («эпоха Unix»). Поскольку эпоха является фиксированной точкой, определение которой не зависит от часового пояса пользователя, и поскольку количество секунд с тех пор одинаково во всех часовых поясах (игнорируя релятивистские эффекты и еще много чего), time() возвращает одно и то же значение независимо от часового пояса. настройки.

6 голосов
/ 07 января 2012

time() возвращает количество секунд с 1 января 1970 г. 00:00:00 GMT .

Количество секунд, прошедших с этого конкретного момента времени, одинаково, независимо от того, находитесь ли вы в Азии / Кабуле или здесь / здесь.

...