2012-11-06 111 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 
相關問題