计算2个出勤时间戳

时间:2013-02-19 03:01:09

标签: php mysql date datetime

如何计算MySQL中的出勤率datetime

例如:我想得到一个人一天工作的总时数。在给定的。

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:00外,总时数为8小时。

3 个答案:

答案 0 :(得分: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;

See it in action

你需要做更多的数学处理休息,但这应该让你开始。

参考

答案 1 :(得分: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

答案 2 :(得分:0)

假设每个工作的人在中午休息一小时,那么这个查询应该使用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)

这是一个示例SQL Fiddle