计算和格式化PHP时间戳的时差

时间:2013-04-20 23:01:29

标签: php mysql math timestamp

我的社区网站的禁止系统使用时间戳记录MySQL表中的时间。

我有以下代码来显示临时禁令发布的时间,但是无法计算时差。它记录禁令的方式是记录禁令发布的时间,并记录临时禁令完成的时间。由此可以计算禁令的长度,不知怎的......

<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

拜托,有人告诉我这里出错了。非常感谢。

5 个答案:

答案 0 :(得分: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;?>

答案 1 :(得分: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);

你能看出这是否符合你的目的..

你可以随时致电:

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

选中此处以获取更多信息datetime

DINS

答案 2 :(得分:0)

你没有错。 date()适用于1/1/1970 00:00:00以来的秒数。所以当你有86400*8 + 3600*1秒作为差异时,你将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";

答案 3 :(得分:0)

($row['temptime'] -$row['time'] )/60为您提供minute

的区别

答案 4 :(得分:0)

我认为最好的方法是

  • $ diff = strtotime(&#39; 2009-10-05 18:11:08&#39;) - strtotime(&#39; 2009-10-05 18:07:13&#39;)