PHP - date_diff与三个以上的元素


PHP - date_diff with more of three elements

我正在尝试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');

在代码中可以看到有两个值(date1和date2)要相减,结果要与另一个值(date3)相减。问题就在这里。第一次操作工作正常,但第二次操作使用第一次操作的结果($totalDate),当我想运行第二次操作不工作。

服务器的日志文件如下:

[Tue Nov 08 17:47:03.309115 2016] [:error] [pid 78386] [client 192.168.0.4:54695] PHP警告:date_diff()期望参数1是DateTimeInterface, object given[Tue Nov 08 17:47:03.309165 2016] [:error] [pid 78386] [client 192.168.0.4:54695] PHP致命错误:在boolean

上调用成员函数format()

我敢肯定,问题是与变量$totalDate不是DateTime类。我已经尝试过这个:$totalDate = new DateTime(date_diff($date1, $date2),但它不工作了:(

你能帮我吗?

谢谢!

有两个概念: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