Как мне учитывать переход на летнее время при получении текущего времени в PHP? - PullRequest
1 голос
/ 18 августа 2011

При получении времени с помощью PHP-скрипта (time()), в летнее время, похоже, возвращается значение времени, которое составляет один час.Есть ли способ получить правильное время с учетом перехода на летнее время?

Ответы [ 5 ]

2 голосов
/ 18 августа 2011

time() возвращает метку времени Unix, а метка времени Unix - это фиксированный период времени: количество секунд с начала эпохи Unix. Это не зависит от часовых поясов.

Когда у вас есть точный момент, вы можете рассчитать местное время в данном месте:

<?php

$now = time();
echo $now . PHP_EOL;

date_default_timezone_set('Europe/Madrid');
echo date('r', $now) . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
echo date('r', $now) . PHP_EOL;

... напечатает разные локальные даты для одной и той же отметки времени:

1313683738
Thu, 18 Aug 2011 18:08:58 +0200
Fri, 19 Aug 2011 01:08:58 +0900

То же самое относится и к противоположной операции:

<?php

date_default_timezone_set('Europe/Madrid');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

date_default_timezone_set('Asia/Tokyo');
$then = mktime(23, 55, 30, 12, 31, 2000);
echo $then . PHP_EOL;

... напечатает разные метки времени:

978303330
978274530
0 голосов
/ 18 августа 2011

Это не будет «ответом», но ваш провайдер может неправильно управлять временем на локальном сервере. Я не знаю контекста использования вами информации о времени, но всякий раз, когда я использую такую ​​информацию, я пытаюсь использовать UTD / GMT. Если ваши пользователи разбросаны по всему миру или даже в одной стране, исправление времени может стать кошмаром. Представление таких вещей, как время сохранения файла, время записи в журнал или другое использование, может быть разумно выполнено с помощью UDT / GMT.

0 голосов
/ 18 августа 2011

Либо убедитесь, что системное время текущее, либо добавьте / вычтите в PHP: http://www.php.net/manual/en/function.date.php#69221

0 голосов
/ 18 августа 2011

Установите правильный часовой пояс, используя date_default_timezone_set()

0 голосов
/ 18 августа 2011

time () возвращает время ОС в формате Unix Timestamp. Вы можете исправить это с помощью PHP, но imho, это должно быть чем-то, что нужно учесть на уровне ОС.

...