从日期时间计算加班时间

时间:2018-05-09 13:30:55

标签: php mysql

我试图根据07:24:00:0000小时的超时因素来计算加班费

我的数据库看起来像这样

| id  |user_id|     starttime       | endtime
|  0  |   1   | 2018-05-09 04:30:00 | 2018-05-09 017:30:00
|  1  |   1   | 2018-05-10 06:30:00 | 2018-05-10 017:30:00
|  2  |   1   | 2018-05-11 04:30:00 | 2018-05-11 015:30:00

我很难搞清楚能够完成这项工作的选择陈述 - 我希望所有人加班加点结果

我的功能现在看起来像这样:

public function getOvertimeTotal($id, $selectedMonth) {
      $this->db->query("SELECT 
      COUNT(SUBTIME(TIMESTAMPDIFF(HOUR, starttime, endtime), '07:24:00:0000')) as overTimeTotal
      FROM hours
      WHERE user_id = :id
      AND month(starttid) = :selectedMonth");

      $this->db->bind(':id', $id);
      $this->db->bind(':selectedMonth', $selectedMonth);

      $row = $this->db->single();

      return $row;

    }

我做错了什么?

2 个答案:

答案 0 :(得分:3)

这可以帮助您计算小时数的加班时间,

SUM((TIMESTAMPDIFF(SECOND, starttime, endtime) - TIME_TO_SEC('07:24:00:0000')) / 3600)

SQLFiddle link

如果您需要及时转换的值,请从上面删除3600部分并使用SEC_TO_TIME()函数

SEC_TO_TIME(SUM(TIMESTAMPDIFF(SECOND, starttime, endtime) - TIME_TO_SEC('07:24:00:0000')))

答案 1 :(得分:0)

您可以尝试在子查询中计算加班时间,然后在命名结果列上进行聚合:

SELECT SUM(overtime) AS overTimeTotal 
FROM (SELECT starttime - endtime AS overtime FROM tablename WHERE [...])

为简单起见,我将WHERE部分遗漏。