Как долго это осталось?php + дата - PullRequest
3 голосов
/ 08 октября 2011
//Example data
$current_time = 1318075950;
$unbanned_time = $current_time + strtotime('+1 minute');


if ($unbanned_time > $current_time) {
  $th1is = date('Y-m-d H:i:s', $unbanned_time) - date('Y-m-d H:i:s', $current_time);
   echo date('Y-m-d H:i:s', $th1is);

Я пытаюсь вывести, сколько времени прошло, пока пользователь не заблокирован ... год, месяцы, дни, часы, минуты и секунды ... Но это дает мне странные результаты ..

Ответы [ 3 ]

5 голосов
/ 08 октября 2011

Вам следует проверить руководство о том, как работать с функциями даты / времени.

Прежде всего, вместо

$current_time + strtotime('+1 minute')

использование

strtotime('+1 minute', $current_time);

(см. Руководство по strtotime).

Во-вторых, функция date возвращает строку. Вычитание двух строк в большинстве случаев не очень полезно.

if ($unbanned_time > $current_time) {
  $th1is = $unbanned_time - $current_time;
  echo $th1is/3600 . ' hours';
}

Это выведет оставшееся время в часах, но есть много доступных функций, которые обеспечат лучшее форматирование (или вы можете написать одну для себя).

4 голосов
/ 08 октября 2011

Я бы порекомендовал использовать DateTime

$DateTime = new DateTime();
$unbanned_DateTime = new DateTime();
$unbanned_DateTime = $unbanned_DateTime->modify('+1 minute');

if ( $unbanned_DateTime > $DateTime ) {
    $interval = $DateTime->diff($unbanned_DateTime);
    $years = $interval->format('%y'); 
    $months = $interval->format('%m'); 
    $days = $interval->format('%d'); 
    $hours = $interval->format('%h'); 
    $minutes = $interval->format('%i'); 
    $seconds = $interval->format('%s');
}

Вместо использования каждого отдельного значения в качестве переменной вы можете использовать -> format () для одного выхода. Как вам нравится.

Помните, что DateTime-> format () требует настройки часового пояса в вашем php.ini или с помощью

date_default_timezone_set('....');
2 голосов
/ 08 октября 2011

date() возвращает строку, вычитать две строки здесь не имеет смысла.Вы можете использовать основную математику для расчета оставшегося времени:

<?php
$current_time = time();
$unbanned_time = /* whatever */;
$seconds_diff = $unbanned_time - $current_time();
echo "You're unbanned at " . date("Y-m-d H:i:s", $unbanned_time) . " which is over ";
if ($seconds_diff <= 120) {
    echo "$seconds_diff seconds";
} else if ($seconds_diff <= 7200) {
    echo floor($seconds_diff / 60) . " minutes";
} else if ($seconds_diff <= 7200 * 24) {
    echo floor($seconds_diff / 3600) . " hours";
} else {
    echo floor($seconds_diff / 3600 / 24) . " days";
}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...