2012-11-06 64 views
0

我使用此代码以小时为单位的两个日期和分钟来计算的区别:计算差异beween以小时为单位的两个日期和分钟

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

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

+4

使它成为函数参数 –

+0

你能解释我该怎么做吗?我是新的PHP功能 –

+0

对于用户定义的功能请参阅http://www.php.net/manual/en/functions.user-defined.php – Baba

回答

7

尝试:

功能:

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); 
+0

是的,但我也有$ date3timestamp和$ date4timestamp,这意味着我必须每次我想计算日期时都要写新函数? –

+0

不,你只需通过时间戳对,当你调用函数例如。对于1352215735(20121101)和1352215759(20121105),您可以将函数调用为'$ result = date_difference(1352215759,1352215735)'。功能的全部目的是多次使用它,而不用重复代码。 –

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个地方修复它,而使用一个功能,你只需要在一个地方修复它。

+1

+1。一个例子叫它'$差= dateDiffHoursMins($ date1timestamp,$ date2timestamp)'。然后你可以访问'$ difference ['d']','$ difference ['h']'和'$ difference ['m']' –

-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 
相关问题