2013-04-20 5 views
0

Система запрета для моего сайта сообщества регистрирует время в таблице MySQL с меткой времени.Вычисление и форматирование разницы во времени от PHP timestamp

У меня есть следующий код, отображающий время временного запрета, но не смог определить разницу во времени. Как он регистрирует запрет, он регистрирует время, когда был выпущен запрет, а также регистрирует время окончания временного запрета. Отсюда длина запрета может быть вычислена, как-то ...

<b>Time of ban:</b> <?php echo date('d/m/Y H:i:s', $row['time']);?><br /> 
<b>Time of unban:</b> <?php echo $row['temptime'];?><br /> 
<b>Unban time - ban time=</b> <?php echo $diff;?> 

Когда я пытаюсь это:

<b>Tempban length:</b> <?php echo date('d/m/Y H:i:s', $diff);?> 

Он выводит Tempban length: 08/01/1970 01:00:00

Пожалуйста, кто-то показать мне, где я неправильно с этим. Большое спасибо.

+0

Вы, кажется, не устанавливаете '$ diff' где-либо – andrewsi

+0

Где/как вычисляется/задается' $ diff'? – dbf

+0

Разница во времени - это не дата. Тогда какая '' Действительно означает? – Amir

ответ

1

попробовать это:

//time when the person was banned 
$banTime = date_format($row['time'], 'Y-m-d H:i:s'); // too make sure its the right format 
$banLifted = date_format($row['temptime'], 'Y-m-d H:i:s'); 

$bt = new Datetime($banTime); 
$bl = new Datetime($banLifted); 

$diffTime = $bl->diff($bt); 

Вы можете увидеть если это служит вашей цели.

вы можете alwa YS вызов:

$diffTime ->format('%R%a days'); //for number or days 

Проверить это для получения дополнительной информации datetime

Dins

+0

Ваш метод лучше и короче, но ** только от 5.3 ** – Ozerich

+0

Это не работает, на 5.3.3 с использованием этого кода: – 2013-04-21 11:58:46

+0

http://pastie.org/private/hsrwihdz2wzfeavodrng – 2013-04-21 11:59:27

1
$diff = $row['temptime'] - $row['time']; 

$diff_years = floor($diff/(365*60*60*24)); 
$diff_monthes = floor(($diff - $diff_years * 365*60*60*24)/(30*60*60*24)); 
$diff_days = floor(($diff - $diff_years * 365*60*60*24 - $diff_monthes*30*60*60*24)/ (60*60*24)); 

$diff_hours = floor(($diff - $diff_years * 365*60*60*24 - $diff_monthes*30*60*60*24 - $diff_days*60*60*24)/ (60*60)); 
$diff_minutes = floor(($diff - $diff_years * 365*60*60*24 - $diff_monthes*30*60*60*24 - $diff_days*60*60*24 - $diff_hours*60*60)/ 60); 

// here you can format output, using variables above, for example: 
$diff = $diff_hours." hours, ".$diff_minutes." minutes."; 

<b>Tempban length:</b> <?php echo $diff;?> 
+0

Серьезный? Вычисление временных разниц? – dbf

+0

@dbf, что здесь не серьезного? Я использовал этот метод много, и он отлично работает – Ozerich

+0

@Ozerich, которому вы только что создали линию длиной 135 символов. Слишком долго? – bwoebi

0

Вы не ошибаетесь. date() работает с секундами с 1/1/1970 00:00:00. Поэтому, когда у вас есть 86400*8 + 3600*1 секунд как diff, в качестве вывода вы получите 08/01/1970 01:00:00. Также у вас будет разница, соответствующая вашему часовому поясу.

Вы должны использовать свою собственную функцию, чтобы показать время:

($seconds является то, что в вашем коде называется $diff)

$years = floor($seconds/365 * 86400); 
$days = floor(($seconds -= $years * 365 * 86400)/86400); 
$hours = floor(($seconds -= $days * 86400)/3600); 
$minutes = floor(($seconds -= $hours * 3600)/60); 
$seconds -= $minutes * 60; 
echo "$years years, $days days, $hours hours, $minutes minutes and $seconds seconds"; 
+0

Не работает: http: // pastie.org/private/jakfpuiawlbad5bei8niwq – 2013-04-21 12:01:55

+0

@JamesAllison Какой выход? – bwoebi

0

($row['temptime'] -$row['time'])/60 дает разницу в minute

0

Думаю лучший способ

  • $ дифф = StrToTime ('2009-10-05 18:11:08') - strtotime ('2 009-10-05 18:07:13 ')
Смежные вопросы