2017-08-03 6 views
0

私は、日付を含む2つの列を持つmySQLテーブルを持っています。 whileループは、$ start_dateと$ end_dateの変数をそれぞれ変数に入れ、それらの間の時間を計算し、diff()を使って新しい変数$ since_startに入れます。私がdiff()を使用して理解している限り、DateIntervalクラスになります。ループ内で増分DateInterval

今私は 'while'ループの間に合計を構築し、それを$ total_received変数に格納したいと思います。私が試した最後のものは、ネットとstackoverflowのを検索した後、

$total_received->add(new DateInterval($since_start)); 

だった。しかし、私はすべての出力を得るいけないと、それは、間違っているようです。私は間違っていることを得ることはありませんが、私はこの行で何をしているのか正確には分かりません。正直で、どこを見なければいいのか分かりません。私はグーグルの答えを見つけることができればと思っています。それはずっと早いですが、できませんでした。私はあなたが助けることを願っています

これまでに$ total_received変数が定義されていた完全なループがあります。

//Set variable for lifetime received total 
$total_received = 0; 

if ($result->num_rows > 0) { 
    // Output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo 
      $row["id"] ." " 
     . $row["donor"]." "; 
     $start_date = new DateTime($row["start"]); 
     $end_date = new DateTime($row["end"]); 
     $since_start = $start_date->diff($end_date); 
     $total_received->add(new DateInterval($since_start)); 
     echo $since_start->format('%h')." Hours ".$since_start->format('%i')." Minutes " 
     . $row["subject"] ." " 
     . $row["complete"] ."<br>"; 
    } 
} else { 
    echo "No lifetime received yet"; 
} 

echo $total_received->format('%h')." Hours ".$total_received->format('%i')." Minutes "; 

ありがとうございます!

答えて

0

問題があること:あなたが後で使用addメソッドを持っていない数、その変数を初期化

  • $total_received = 0
  • $since_startはそうnew DateInterval($since_start)を行うことはあまり意味がない、とあなたが一緒に日付の間隔を追加しますが、唯一の日付/時刻に日付の間隔を追加することはできませんエラー

をトリガし、すでにDateIntervalです。だから、基準となる日付/時刻を使用し、それにそれぞれの間隔を追加してください。最後に、結果の日付/時刻との差分を取って最終的な時間を取得します。

// Create the "interval" as a start/end reference date 
$ref_start = new DateTime("00:00"); 
$ref_end = clone $ref_start; 

if ($result->num_rows > 0) { 
    // Output data of each row 
    while($row = $result->fetch_assoc()) { 
     echo 
      $row["id"] ." " 
     . $row["donor"]." "; 
     $start_date = new DateTime($row["start"]); 
     $end_date = new DateTime($row["end"]); 
     $since_start = $start_date->diff($end_date); 
     // Move the end date/time of the reference period 
     $ref_end->add($since_start); 
     echo $since_start->format('%h')." Hours ".$since_start->format('%i')." Minutes " 
     . $row["subject"] ." " 
     . $row["complete"] ."<br>"; 
    } 
} else { 
    echo "No lifetime received yet"; 
} 
// Only now convert the reference period to an interval 
$total_received = $ref_start->diff($ref_end); 

echo $total_received->format('%h')." Hours ".$total_received->format('%i')." Minutes ";