質問: date('H:i', strtotime("-1 hours", $jitsudo)); // もう一時間多いならで、一時間引くという感じにしてみまして、一応表示はされましたが、こんな感じですかね? ``` さて、、、最後なのですが、、、 今は1日ごとの実働が表示されるというのは満足ですが、その実働の合計が表示されるようにしたいのですが、、、 最後にこの部分に関してのロジックをアドバイスお願いできますでしょうか? ※この質問は少し内容がずれてきてしまうので、一度解決済みとさせていただき新規に質問をいたします。
回答: まず、前提として、nameで絞り込まれており、period_dttmで昇順に並んでいるとします。 ``` ... // 抽出して表示 $data = []; $jitsudo = 0; while ($row = $stmt->fetch()) : $datetime = $row['period_dttm']; list ($year, $month, $day, $hour, $minutes, $second) = preg_split('/[-: ]/', $datetime); // 時刻の丸め処理 $minutes = round($minutes / 5) * 5; $time = mktime($hour, $minutes, 0, 1, 1, 2000); $minutes = date('i', $time); $hour = date('H', $time); if ($year != $data['year'] || $month != $data['month'] || $day != $data['day']) { $jitsudo = ($data['退勤'] - $data['出勤']) - (@$data['休戻'] - @$data['休入']) - (@$data['待戻'] - @$data['待入']); $data = []; } $data['year'] = $year; $data['month'] = $month; $data['day'] = $day; $data[$row['dakoku']] = $time; if($jitsudo): ?> 実働:= $jitsudo ?> // table形式で表示させる予定なので、、、 = h($row['name']); ?> = h($row['dakoku']); ?> = h($month) . '/' . h($day); ?> = h($hour) . ':' . h($minutes); ?> 実働:= $jitsudo ?> ``` もしかしたら、出勤・退勤以外はない可能性も考慮して、その他はエラー抑制演算子を付けてます。 日付が変わっているところで、実働時間の計算をしていますので、日付が渡った場合はちゃんと計算できません。 なので、日付が渡る場合は、「$dataが空じゃなくてdakoku=出勤のデータが現れたら」とかにするといいかもしれませんね。