1

datetimeMySQLで出席を計算する方法のアイデア。

例:人が1日に働いた合計時間を取得したい。与えられた。

MySQLの構造:

-----------------------------------------------------
id   |   datetime         |   Status    |  employeeID
-----------------------------------------------------
1    | 18-Feb-13 8:00:00  |  Check in   |    100A
2    | 18-Feb-13 10:00:00 |  Check in   |    100A
3    | 18-Feb-13 17:00:00 |  Check Out   |    100A

それでも、休憩時間の午後12時を除いた合計時間は8時間です。

4

3 に答える 3

0

人々が去るときにチェックアウトステータスをどこに持っているかなら、あなたは自己参加をすることができます。
何かのようなもの:

Select day(e.datetime) as day, employeeid, 
       (max(e.datetime) - min(s.datetime)) as timespend
from table1 e
inner join table1 s on (day(e.datetime) = day(s.datetime) and e.id <> s.id)
where s.status = 'check in' and e.status = 'check out'
group by day(e.datetime), employeeid
于 2013-02-19T03:15:50.017 に答える
0

働くすべての人が正午に1時間休むと仮定すると、このクエリはTIMESTAMPDIFF、各従業員と各日付でグループ化して、を使用して機能するはずです。

SELECT TIMESTAMPDIFF(HOUR, 
           MIN(CASE WHEN Status = 'Check In' THEN DateTime END), 
           MAX(CASE WHEN Status = 'Check Out' THEN DateTime END))-1 as HoursWorked, 
  EmployeeId, 
  Date(DateTime)
FROM YourTable T
GROUP BY EmployeeId, Date(DateTime)

そして、ここにサンプルのSQLFiddleがあります。

于 2013-02-19T03:16:03.130 に答える
0

日付計算を行うPHPの方法は次のとおりです。

$datetime1 = DateTime::createFromFormat('d-M-Y G:i:s', '18-Feb-13 8:00:00');
$datetime2 = DateTime::createFromFormat('d-M-Y G:i:s', '18-Feb-13 17:00:00');
$interval = $datetime1->diff($datetime2);
$elapsed = $interval->format('%h hours %i minutes %S seconds');
echo $elapsed;

実際に見る

ブレークに対処するには、さらに計算を行う必要がありますが、これで作業を開始できます。

参照

于 2013-02-19T03:06:22.053 に答える