2012-05-06 124 views
16

我在PHP中有兩個日期在PHP中減去兩個日期

$date1 = 'May 3, 2012 10:38:22 GMT' 

$date2 = '06 Apr 2012 07:22:21 GMT' 

然後我減去兩者

$date2 - $date1 

,並得到

Result:6 

爲什麼是6的結果而不是27? ...?我如何減去這兩個日期,並根據月份差異向我返回一個結果,同時減去&天&時間?

回答

43

第1部分:爲什麼結果6?

日期只是字符串,當你第一次減去它們。 PHP嘗試將它們轉換爲整數。它通過轉換直到第一個非數字來做到這一點。因此,date2變爲6,date1變爲0.

第2部分:如何使其工作?

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

適當轉換。

+0

我需要的秒數轉換2 times..to天.. 。沒有更快的方法 –

+0

一天中的秒= 60 * 60 * 24 = 86,400因此,除以那個。 – evan

+0

偉大的解決方案@evan。豎起大拇指(y) – NullPointer

9

使用DateTimeDateInterval

$date1 = new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2 = new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->format("%d"); 
+0

這將返回我差異的天..因此,我想要..找到日期差異 –

+0

是不是你想要的? –

+0

是的,這是.....謝謝 –

12

還有就是用mktime n請的日期戳,然後減去,然後使用日期函數u中所希望的方式來展現一種方式....

另一種方式是該格式都相同格式的日期,然後減去....

第三條道路

$date1= new DateTime("May 3, 2012 10:38:22 GMT"); 
$date2= new DateTime("06 Apr 2012 07:22:21 GMT"); 
echo $date1->diff($date2)->("%d"); 

提出的方式

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 
$secs = $datetime2 - $datetime1;// == return sec in difference 
$days = $secs/86400; 
5
$todate= strtotime('May 3, 2012 10:38:22 GMT'); 
$fromdate= strtotime('06 Apr 2012 07:22:21 GMT'); 
$calculate_seconds = $todate- $fromdate; // Number of seconds between the two dates 
$days = floor($calculate_seconds/(24 * 60 * 60)); // convert to days 
echo($days); 

此代碼會發現兩個日期之間的時間差..

輸出。這裏是27

5

大多數提出的解決方案似乎是工作,但每個人都忘了一件事:時間。

埃文例如:

$datetime1 = strtotime('May 3, 2012 10:38:22 GMT'); 
$datetime2 = strtotime('06 Apr 2012 07:22:21 GMT'); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 

如果不修剪部分時間,什麼可能導致milscalculations。例如:2014-05-01 14:00:00(Y-m-d)和2014-05-02 07:00:00之間的時間間隔將爲0,xxx,而不是1.您應該在每個日期中調整時間的一部分。

所以它應該是:

$datetime1 = strtotime(date('Y-m-d', strtotime('May 3, 2012 10:38:22 GMT'))); 
$datetime2 = strtotime(date('Y-m-d', strtotime('06 Apr 2012 07:22:21 GMT'))); 

$secs = $datetime2 - $datetime1;// == <seconds between the two times> 
$days = $secs/86400; 
0
echo 'time'.$notification_time= "2008-12-13 10:42:00"; 
date_default_timezone_set('Asia/Kolkata'); 
echo 'cureen'.$currenttime=date('Y-m-d H:i:s'); 
$now = new DateTime("$notification_time"); 
$ref = new DateTime("$currenttime"); 
$diff = $now->diff($ref); 
printf('%d days, %d hours, %d minutes', $diff->d, $diff->h, $diff->i); 
0

如果你想使用diff(它返回一個Dateinterval對象)方法,正確的方法是用一個%格式化。我的意思是:

如果檢查http://php.net/manual/en/dateinterval.format.php

正確的方法是:

echo $date1->diff($date2)->format("%a"); 

爲了讓所有天

+0

方法名稱被省略,正確的是: echo $ date1-> diff($ date2) - > format(「%a」); –

+0

你是真實的,我會編輯我的迴應。謝謝 –