2016-11-08 30 views
0

我想用php語言的函數date_diff。我需要做三個或更多值的操作。PHP - 與三個元素更多的date_diff

例如:

$date1 = new DateTime('11:00:00'); 
$date2 = new DateTime('10:00:00'); 

$totalDate = date_diff($date1, $date2); 
echo "<br>TOTAL: ".$totalDate->format('%H:%i:%s'); 

$date3 = new DateTime('02:00:00'); 
$totalDate2 = date_diff($totalDate, $date3); 
echo "<br>TOTAL: ".$totalDate2->format('%H:%i:%s'); 

在代碼它可以看到有兩個值(日期1和date2),以和。減去的結果與另一個值(DATE3)至。減去。問題在這裏。第一個操作工作正常,但第二個操作使用第一個操作的結果($ totalDate),而當我想運行第二個操作時不起作用。

服務器的日誌文件是這樣的:

[星期二17年11月8日:47:03.309115 2016] [:錯誤] [PID 78386] [客戶端192.168.0.4:54695] PHP警告:date_diff()預計參數1爲DateTimeInterface,對象給出 [Tue Nov 08 17:47:03.309165 2016] [:error] [pid 78386] [client 192.168.0.4:54695] PHP致命錯誤:調用成員函數format()on布爾值

我確定問題出在變量$ totalDate不是DateTime類。我曾嘗試與此:$totalDate = new DateTime(date_diff($date1, $date2)但它不會再次工作:(

請你幫我

感謝

+0

你需要的是'date_diff($ DATE1,$ DATE3);'或'date_diff($ DATE2,$ DATE3);' –

+0

我需要:'$ result1 = date_diff($ date1,$ date2)'和'$ result2 = date_diff($ result1,$ date3)'問題是使用result1到第二個date_diff – ruzD

+0

你確定? '$ result1'是一個區別('DateInterval')而不是DateTime對象。我認爲你試圖比較蘋果和橘子 – RiggsFolly

回答

2

,有兩個概念:?!DateTime和DateInterval

你「再失配兩種不同的思路

$dateTime1 = new DateTime('11:00:00'); // DateTime() returns DateTime object. 
$dateTime2 = new DateTime('10:00:00'); // DateTime() returns DateTime object. 

$dateInterval1 = date_diff($dateTime1, $dateTime2); // date_diff() returns DateInterval object. http://php.net/manual/en/class.dateinterval.php 
echo "<br>Difference1: " . $dateInterval1->format('%H:%i:%s'); // (11 - 10) = 1 

$dateTime3 = new DateTime('02:00:00'); 
$dateString = $dateInterval1->format('%H:%i:%s'); 
$dateTime4 = new DateTime($dateString); 
$dateInterval2 = date_diff($dateTime4, $dateTime3); 
echo "<br>Difference2: " . $dateInterval2->format('%H:%i:%s'); // (1 - 2) = |-1| = 1 

// Output 
// Difference1: 01:0:0 
// Difference2: 01:0:0