【问题标题】:Calculate 2 timestamp in attendance计算 2 出勤时间戳
【发布时间】:2013-02-19 03:01:09
【问题描述】:

关于如何在 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

总小时数仍然是 8 小时,不包括下午 12:00 的休息时间。

【问题讨论】:

标签: php mysql date datetime


【解决方案1】:

这是一种进行日期数学运算的 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

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

参考

【讨论】:

    【解决方案2】:

    如果您在人们离开时在哪里查看结帐状态,那么您可以进行自助加入。
    类似的东西:

    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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • @Japeth -- 没问题,很高兴我能帮上忙 :) 顺便说一句,如果答案对您有所帮助,请将其标记为已接受,以帮助该网站的未来用户。祝你好运!
      • 嗨@sgeddes 可以计算分钟吗?
      • @Japeth -- 当然 :) 看看你可以用 TimeStampDiff 做什么。这是一个例子:sqlfiddle.com/#!2/9e3f4/7
      猜你喜欢
      • 2014-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2015-03-14
      相关资源
      最近更新 更多