PHP Datetime在While循环中添加到DateTime 30次

时间:2016-05-30 11:45:11

标签: php datetime

我需要帮助, 我有一个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必须在所有时间完成差异。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

假设$eDateTime对象,则您的日期格式不正确。 请参阅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)
  //...
}

示例:http://ideone.com/v9bzLe