ご教授お願いいたします。
勉強中ですので、質問内容がわかりにくいところがあれば
すみませんがご指摘いただけると幸いです。
【質問内容】
「開始」と「終了」ボタンを置き、
「開始」を押すとstart_timesテーブルに1件挿入し、表示
「終了」を押すとstop_timesテーブルに1件挿入し、表示
そして、開始と終了の時間差($time['0'])を表示
<ここまではできました>
やりたいことは、
この「時間差($time['0'])」をどんどん加算して
時間の合計を出したいと思っているのですが、
今のコードではどうやっても加算が思いつきません。
ご教授いただけるとありがたいです。
<form action="iframe_after.php" method="POST" target="iframe"> <button id="start_button" type="submit" name="start">開始</button> <button id="stop_button" type="submit" name="stop">終了</button> </form> <iframe src="iframe_before.php" name="iframe"></iframe> <?php if(isset($_POST['start'])) { $db->exec('INSERT INTO start_times SET start_time_date=NOW(), start_time=NOW()'); } else if(isset($_POST['stop'])) { $db->exec('INSERT INTO stop_times SET stop_time_date=NOW(), stop_time=NOW()'); } $start_times = $db->query('SELECT * FROM start_times WHERE start_time_date = CURRENT_DATE'); $stop_times = $db->query('SELECT * FROM stop_times WHERE stop_time_date = CURRENT_DATE'); while($start_time = $start_times->fetch()) { echo "開始" . $start_time['start_time_date'] . " " . $start_time['start_time'] . '<br>'; $stop_time = $stop_times->fetch(); echo "終了" . $stop_time['stop_time_date'] . " " . $stop_time['stop_time'] . '<br>'; $times = $db->query("SELECT TIMEDIFF('". $stop_time['stop_time'] ."' , '" . $start_time['start_time'] ."')" );// 時間差 $time = $times->fetch(); echo $time['0'] . '<br>' . '<br>'; } ?>
修正します。
アドバイスいただいた内容を参考にし、
「時間差($time['0'])」を加算していくのではなく
下記のコードのように開始時間と終了時間の差を
work_timesというテーブルに入れていくことにしました。
そして、そのテーブルの時間合計を取得して出力するまではできたのですが、
例えば、50秒の時間合計だったときに
09:00:50
というような表示になってしまいます。
これを直すにはどのようにすればいいでしょうか。
php.iniのタイムゾーンは
date.timezone = Asia/Tokyo
になっております。
<?php if(isset($_POST['start'])) { // 今日の日付のstart_timesテーブルのレコード数を取得 $start_times_table = $db->query('SELECT * FROM start_times WHERE start_time_date = CURRENT_DATE'); $start_times_records = $start_times_table->rowCount(); // 今日の日付のstop_timesテーブルのレコード数を取得 $stop_times_table = $db->query('SELECT * FROM stop_times WHERE stop_time_date = CURRENT_DATE'); $stop_times_records = $stop_times_table->rowCount(); // start_timesとstop_timesのレコード数が同じかどうか, 同じであればstart_timesにインサート if($start_times_records == $stop_times_records){ $db->exec('INSERT INTO start_times SET start_time_date=NOW(), start_time=NOW()'); } else { echo '<br>' . '一度開始が押されています。「終了」を押してください' . '<br><br>'; } } else if(isset($_POST['stop'])) { $db->exec('INSERT INTO stop_times SET stop_time_date=NOW(), stop_time=NOW()'); $starts = $db->query('SELECT * FROM start_times ORDER BY id DESC LIMIT 1'); $stops = $db->query('SELECT * FROM stop_times ORDER BY id DESC LIMIT 1'); $start = $starts->fetch(); $stop = $stops->fetch(); $db->exec("INSERT INTO work_times SET work_time_date = NOW(), work_time = TIMEDIFF( '". $stop['stop_time'] ."' , '" . $start['start_time'] ."' )"); } $work_times = $db->query('SELECT SUM(work_time) FROM work_times WHERE work_time_date = CURRENT_DATE'); $work_time = $work_times->fetch(); echo date('h:i:s', $work_time['SUM(work_time)']); // 今日のstart,stopのデータを1件ずつ交互に全て表示 $start_times = $db->query('SELECT * FROM start_times WHERE start_time_date = CURRENT_DATE'); $stop_times = $db->query('SELECT * FROM stop_times WHERE stop_time_date = CURRENT_DATE'); while($start_time = $start_times->fetch()) { echo "開始" . $start_time['start_time_date'] . " " . $start_time['start_time'] . '<br>'; $stop_time = $stop_times->fetch(); echo "終了" . $stop_time['stop_time_date'] . " " . $stop_time['stop_time'] . '<br>'; $times = $db->query("SELECT TIMEDIFF('". $stop_time['stop_time'] ."' , '" . $start_time['start_time'] ."')" );// 時間差 $time = $times->fetch(); echo $time['0'] . '<br>' . '<br>'; } ?>
回答1件
あなたの回答
tips
プレビュー