2016-10-12 352 views
1

林之間的差異試圖返回兩個日期之間的區別,我根據example found on stackoverflowPHP比較兩個日期

我的問題的工作?我得到完全錯誤的結果返回,下面的代碼返回30年,0個月,9天,當它顯然應該只有7天或1周。下面

代碼如下:

date_default_timezone_set('America/Los_Angeles'); 

    $pickupDate = '2016-10-13'; 
    $returnDate = 2016-10-20; 

    $diff = abs(strtotime($pickupDate) - strtotime($returnDate)); 
    $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)); 

    printf("%d years, %d months, %d days\n", $years, $months, $days); 

任何輸入讚賞

+0

使用PHP的內置日期函數,不要做天真小時*天的計算。 – Dai

回答

1

只要把單引號中的歸期像$returnDate = '2016-10-20';,你可以使用PHP像date_diff()功能,

$daysdiffernce = date_diff(date_create('2016-10-13'),date_create('2016-10-20')); 
echo $daysdiffernce->format("%R%a days"); 

,這會給完全+ 7天回答

+0

讓我知道,如果它不適合你? –

+0

工作就像一個魅力;每天你學習新的東西'date_diff()'謝謝 –

1

首先,代碼不考慮閏年,變個月之類的東西的長度。

實際上有一個PHP函數對於這一點,請檢查鏈接的詳細信息:採取http://php.net/manual/en/datetime.diff.php,並舉例:

$datetime1 = new DateTime('2016-10-13'); 
$datetime2 = new DateTime('2016-10-20'); 
$interval = $datetime1->diff($datetime2); 
echo $interval->format('%y years, %m months, %d days'); 
1

試試這個,它會給你的日期不同,而且,時間,分鐘,小時,第二和等

date_default_timezone_set('America/Los_Angeles'); 
$now = '2016-10-13'; 
$returnDate = '2016-10-20'; 
$start = date_create($returnDate); 
$end = date_create($now); 
$diff=date_diff($end,$start); 
print_r($diff); 

DEMO

1
date_default_timezone_set('America/Los_Angeles'); 

$pickupDate = '2016-10-13'; 
$returnDate = '2016-10-20'; //use signle quote same as pickupDate 

$diff = abs(strtotime($returnDate) - strtotime($pickupDate)); // change the order 
$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)); 

printf("%d years, %d months, %d days\n", $years, $months, $days); 

感謝