2011-03-23 113 views
0

使用下面的PHP代碼,我期望得到'2'作爲我的輸出。但我得到'1'。PHP DateDiff問題

有誰知道這是爲什麼?

$returndate = preg_replace('#(\d+)/(\d+)/(\d+)#', '$3-$2-$1', '2011-03-28'); 
$departdate = preg_replace('#(\d+)/(\d+)/(\d+)#', '$3-$2-$1', '2011-03-26'); 

$diff = abs(strtotime($returndate) - strtotime($departdate)); 

$years = floor($diff/(365*60*60*24)); 
$months = floor(($diff - $years * 365*60*60*24)/(30*60*60*24)); 
$days = floor(($diff - $years * 365*60*60*24 - $months*30*60*60*24)/ (60*60*24)); 

echo $days; // expecting 2, but get 1 

非常感謝您的任何幫助。

回答

5

這麼多的計算...我認爲它的你有一個四捨五入的問題,捨去所有的時間測量...這是你在做什麼更簡潔的外觀:

function dateDiff($start, $end) { 
    $start_ts = strtotime($start); 
    $end_ts = strtotime($end); 
    $diff = $end_ts - $start_ts; 
    return round($diff/86400); 
} 
+0

很多,非常感謝Jared,完美地工作。 – michaelmcgurk 2011-03-23 20:30:51

4
$d1 = new DateTime('2011-03-28'); 
$d2 = new DateTime('2011-03-26'); 

echo $d1->diff($d2)->d; 

輸出:2

+0

需要注意的是,這只是PHP 5.3+。 – tplaner 2011-03-23 19:37:12

+0

@evolve,非常真實。我不再提到,因爲PHP 5.2已經超過了支持結束。 – Matthew 2011-03-23 19:39:04

+0

感謝您的幫助。不幸的是,應用程序的其餘部分依賴於PHP4:'( – michaelmcgurk 2011-03-23 20:01:09