PHP - date_diff包含三个元素

时间:2016-11-08 16:56:49

标签: php

我正在尝试使用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,给定对象 [Tue Nov 08 17:47:03.309165 2016] [:error] [pid 78386] [client 192.168.0.4:54695] PHP致命错误:在布尔上调用成员函数format()

我确定问题是变量$ totalDate不是DateTime类。我尝试过这个问题:$totalDate = new DateTime(date_diff($date1, $date2)但它不再有效:(

请你能帮帮我吗?

谢谢!

1 个答案:

答案 0 :(得分: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