以小时和分钟计算两个日期之间的差异

时间:2012-11-06 15:19:43

标签: php mysql date time

我使用此代码计算两小时和小时之间的差异:

$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);

完美的工作但是当我必须多次计算日期之间的差异时我必须再次编写代码并更改值是否有任何简单的方法来计算多次而无需重写代码?

3 个答案:

答案 0 :(得分:6)

尝试:

功能:

function date_difference ($date1timestamp, $date2timestamp) {
$all = round(($date1timestamp - $date2timestamp) / 60);
$d = floor ($all / 1440);
$h = floor (($all - $d * 1440) / 60);
$m = $all - ($d * 1440) - ($h * 60);
//Since you need just hours and mins
return array('hours'=>$h, 'mins'=>$m);
}

调用该函数:

$result = date_difference($date1timestamp, $date2timestamp);

答案 1 :(得分:2)

如果我理解正确,您需要将此代码封装在一个函数中,然后您可以在需要再次使用它时调用该函数,而不是重写它。

function dateDiffHoursMins($date1timestamp, $date2timestamp)
{
   $all = round(($date1timestamp - $date2timestamp) / 60);
   $d = floor ($all / 1440);
   $h = floor (($all - $d * 1440) / 60);
   $m = $all - ($d * 1440) - ($h * 60);

   return array('d' => $d, 'h' => $h, 'm' => $m);
}

要使用它,只需调用dateDiffHoursMins()并将两个时间戳传递给它。它将返回一个数组,以便您可以像这样获取值:

$diff = dateDiffHoursMins($time1, $time2);
$hours = $diff['h'];
echo("Hours: " . $hours);

将代码封装在函数中的过程通常被称为保持代码 DRY ,这是代表不要重复自己的首字母缩写词。这是您应该始终努力的目标。它使代码编写更快,更容易调试。想象一下,如果你在整个文件中复制/粘贴了20个片段,然后在其中发现了一个错误。你必须在所有20个地方修复它,而使用一个功能,你只需要在一个地方修复它。

答案 2 :(得分:-1)

解决这个问题的一个好方法是用秒来考虑它。

第一步是在SQL中拉出时间戳差异($ dbc是我的数据库连接):

$timeQuery= mysqli_query($dbc,
                "SELECT TIMESTAMPDIFF(second,TIME1,TIME2) AS DIFF,

然后将其分配给变量

while ($row = mysqli_fetch_array($timeQuery)) {
    $totalTime = $row["DIFF"];

然后开始转换:

//Seconds in an hour
$unith =3600;       
//Seconds in a minute
$unitm =60;

//Number of hours and then the seconds remaining for minute calc
$hh = intval($totalTime / $unith);    
$ss_remaining = ($totalTime - ($hh * 3600));        
//Number of minutes and then the seconds remaing        
$mm = intval($ss_remaining / $unitm);    
$ss = ($ss_remaining - ($mm * 60));

然后你可以像这样打印出来:

$hh . ' : ' . $mm . ' : ' . $ss