0

我使用此代码以小时和分钟计算两个日期之间的差异:

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

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

4

3 回答 3

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);
于 2012-11-06T15:25:24.713 回答
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);

这种将代码封装在函数中的过程通常被称为保持代码干燥,这是一个首字母缩写词,代表Dont Repeat Yourself。这是您应该始终为之奋斗的目标。它使代码更快地编写并且更容易调试。想象一下,如果您在整个文件中复制/粘贴了该片段 20 次,然后在其中发现了一个错误。您必须在所有 20 个地方修复它,而对于一个功能,您只需在一个地方修复它。

于 2012-11-06T15:23:41.007 回答
-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
于 2012-11-06T15:27:47.137 回答