我需要帮助, 我有一个while循环,日期为mysql一个月。 我计算了时间之间的差异。 现在我必须总结所有差异。 我已经尝试了很多。有什么选择可以在不写每天的情况下添加所有差异吗?
while($row = mysqli_fetch_assoc($sql)){ // <---- while loop makes round 30 times... 1 month long
$usern = $row['title'];
$arbeit = $row['description'];
$start_com = $row['start']; // <--- DATETIME
$end_com = $row['end']; // <----- DATETIME
$shop = $row['category'];
$time_from = strtotime( $start_com );
$time_from = date("H:i", $time_from);
$time_to = strtotime( $end_com );
$time_to = date("H:i", $time_to);
$dteStart = new DateTime($start_com);
$dteEnd = new DateTime($end_com);
$dteDiff = $dteStart->diff($dteEnd);
$e = MyDateInterval::fromDateInterval($dteDiff);
$e->add($dteDiff); // ----- this not works
echo '.$dteDiff->format("%H:%I").';
}
// echo $e->format("%H:%I:%S"); // ------- not working...
// <---- here i need sum of the datetimes diff ---->
$ dteDiff必须在所有时间完成差异。任何人都可以帮助我吗?
答案 0 :(得分:0)
假设$e
是DateTime
对象,则您的日期格式不正确。
请参阅http://php.net/manual/en/function.date.php
I
(大写i)是夏令时,您应该使用i
分钟。
S
(大写s)是当月的英文序数后缀,2个字符,如第2个,第1个,第5个,你应该使用s
秒。
因此,您需要使用$e->format('H:i:s')
来显示格式化的小时,分钟和秒。输出14:30:54
。
<强>简化强>
不是尝试添加DateIntervals,而是可以通过设置初始日期和比较日期来简化它,以便从中获得结果差异。
$initialDate = new DateTime;
$compareDate = clone $initialDate;
while($row = mysqli_fetch_assoc($sql)) {
$start_com = $row['start']; // <--- DATETIME - PAST
$end_com = $row['end']; // <----- DATETIME - FUTURE
$startDate = DateTime::createFromFormat('Y-m-d H:i:s', $start_com);
$endDate = DateTime::createFromFormat('Y-m-d H:i:s', $end_com);
if ($startDate && $endDate) {
$initialDate->add($startDate->diff($endDate));
}
}
$sumDiff = $compareDate->diff($initialDate);
var_dump($sumDiff);
输出:
object(DateInterval)#6 (15) {
["y"]=>
int(312)
["m"]=>
int(3)
["d"]=>
int(12)
["h"]=>
int(19)
["i"]=>
int(53)
["s"]=>
int(50)
//...
}