2012-04-01 3 views
0

У меня возникли проблемы с указанием того, сколько осталось времени.Ошибка времени по времени PHP

Это мой код:

echo date("H:i:s", $show_job['deadline'] - time()); 

Мой часовой пояс сервера: Европа/Амстердам

Это то, что время собирается в базе данных:

$currentTimestamp = time(); 
$in24hourstime = strtotime("+24 hours", $currentTimestamp); 

Проблема что некоторые из моих пользователей получают, например, 10 часов, а не 24 часа. Я предполагаю, что эти пользователи из разных часовых поясов. Я в Лондоне.

Что может быть причиной этой ошибки? Заранее спасибо.

+0

Оффтоп: Почему бы не «+1 день»? '+24 часа' вызовет проблемы во временных часах, которые поддерживают летнее/зимнее время. – Basti

+0

Я не думаю, что это может быть ошибка. Я использую этот код где-то еще, что составляет 2 минуты, а некоторые игроки получают 11 часов и 2 минуты. Я попробую это, хотя, спасибо. –

+0

'$ in24hourstime = $ currentTimestamp + 86400;' – kijin

ответ

1

Сначала его хорошая идея явно установить часовой пояс по умолчанию в сценарии с помощью функции даты PHP следующим образом:

date_default_timezone_set('Europe/London'); 

См http://php.net/manual/en/function.date-default-timezone-set.php

Это обеспечивает все расчеты даты использовать правильный внутренний часовой пояс. При отображении даты для пользователя вы можете соответствующим образом настроить время на свой часовой пояс.

Изменение ваш пример немного позволяет создать две переменные с UNIX метки времени на данный момент и в течение 24 часов:

$now = time(); 
$in24hourstime = strtotime("+24 hours", $now); 

Чтобы вычислить разницу мы можем вычитать одно из другого, чтобы дать нам разницу в секундах:

$remaining = $in24hourstime - $now;  

В нашем примере значение остатка $ составляет 86400 секунд. Если бы это значение было 0 или отрицательное число, мы можем предположить, что крайний срок прошел.

if($remaining > 0) { 

    $hours = intval(intval($remaining)/3600); 
    $minutes = intval(($remaining/60) % 60); 
    $seconds = intval($remaining % 60); 

    echo $hours . ' hours, '.$minutes.' minutes and '.$seconds . ' seconds remaining!'; 

} else { 

    echo "Deadline has been met. No time remaining!"; 
} 

Как и в сторону, вы можете найти с помощью DateTime класс РНР полезно, как на мой взгляд, дает много преимуществ по сравнению с встроенным времени() и дату() и более простой способ для решения временных зон:

Посмотреть : http://php.net/manual/en/book.datetime.php

+0

Часовой пояс - это фактически часовой пояс сервера по умолчанию. Я действительно использовал метод, похожий на ваш, и, похоже, он работает до сих пор. Если это не так, я буду использовать ваши, но вы за свой ответ! –

Смежные вопросы