現在タイムカードを作成しています。
一ヶ月分というか当月の○○さんで検索すると、その月のデータがずらっと出るようにしました。
PHP
1<form action="" post=""> 2<select name="year"> 3<select name="month"> 4<select name="name"> 5// 中は省略しています 6<input type="submit" name="serch" value="検索"> 7</form> 8 9// データの受取と少し細工 10$year = $_POST['year']; 11$month = $_POST['month']; 12$month = sprintf("%02d", $month); 13$name = $_POST['name']; 14$startday = $year . $month . '01'; 15$endday = date('Y-m-t', strtotime($year . '-' . $month)); 16 17// DBに接続し、SELECT 18省略 19 20// 抽出して表示 21while ($row = $stmt->fetch()) : 22$datetime = $row['period_dttm']; 23list ($year, $month, $day, $hour, $minutes, $second) = preg_split('/[-: ]/', $datetime); 24 25// 時刻の丸め処理 26$minutes = round($minutes / 5) * 5; 27$time = mktime($hour, $minutes, 0, 1, 1, 2000); 28$minutes = date('i', $time); 29$hour = date('H', $time); 30?> 31 32// table形式で表示させる予定なので、、、 33<tr> 34<td><?= h($row['name']); ?></td> 35<td><?= h($row['dakoku']); ?></td> 36<td><?= h($month) . '/' . h($day); ?></td> 37<td><?= h($hour) . ':' . h($minutes); ?></td> 38</tr> 39<?php endwhile; ?>
多少省略して書いてしまっておりますが、だいたいの流れとしてはこのような感じで作成してみました。
表示等に関しては特に問題はなく、検索も抽出も表示もできております。
ここからが、本題であります。
一ヶ月分の$hour . $minutesを計算したいのですが、、、いくつか条件がありまして、それを踏まえつつやるにはどのような方法があるのかと思い質問いたします。
1.$row['dakoku']
出勤、退勤、休入、休戻、待入、待戻のいずれかが入っております。
2.計算式としては
(退勤 - 出勤) - (休戻 - 休入) - (待戻 - 待入)=1日の実働時間
※ここで()をつけたのは、もしかしたらこうやってまず3つの分類で計算したものを最終的に計算するのがいいのかな?と思っただけです。。。。
3.例
検索の結果下記のように表示されたとします
職員名 打刻 月日 時分
○○ 出勤 3/19 9:00
○○ 休入 3/19 12:00
○○ 休戻 3/19 13:00
○○ 退勤 3/19 18:00
○○ 出勤 3/20 9:00
○○ 待入 3/20 10:30
○○ 待戻 3/20 11:00
○○ 休入 3/20 12:00
○○ 休戻 3/20 13:00
○○ 待入 3/20 15:00
○○ 待戻 3/20 16:00
○○ 退勤 3/20 18:00
※長くなってしまうので、これくらいにしておきます。
上記の場合
3/19 18:00-9:00-(13:00-12:00)=8:00
3/20 18:00-9:00-(11:00-10:30)-(13:00-12:00)-(16:00-15:00)=6:30
「3月の実働は14時間30分です。」
このような結果を、データを検索したついでに同時に出しておきたいのですが、どのような方法が考えられますか?
Excelなどでも作業のためだけの列を作ったりして、その作業列で計算とかあるので、こちらでもそういった見えないけど、裏で作業列があってそこでまずはの計算してって形をするとどうなのか?とか考えたのですが、実行するスキルが乏しいので、アドバイスお願いできますか?
[追記]
1日の実働部分の表示ができるようになりました。ありがとうございます!
次に、実際は実働8:00であるのですが、表示は28800という数字になっておりました。そこで、、、
PHP
1$jitsudo = date('H:i', $jitsudo); 2// このフォーマットだと、8:00のはずが9:00となり、一時間常に多くなった 3 4$jitsudo = date('H:i', strtotime("-1 hours", $jitsudo)); 5// もう一時間多いならで、一時間引くという感じにしてみまして、一応表示はされましたが、こんな感じですかね?
さて、、、最後なのですが、、、
今は1日ごとの実働が表示されるというのは満足ですが、その実働の合計が表示されるようにしたいのですが、、、
最後にこの部分に関してのロジックをアドバイスお願いできますでしょうか?
※この質問は少し内容がずれてきてしまうので、一度解決済みとさせていただき新規に質問をいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/03/19 06:02
2016/03/19 06:04 編集
2016/03/19 06:13
2016/03/19 06:14
2016/03/19 06:16
2016/03/19 06:17
2016/03/19 06:22 編集
2016/03/19 06:32
2016/03/19 06:53
2016/03/19 07:01