24小时时间表-时差


24 hours schedule- Time Diff

我必须为分布在全球各地的所有人员建立一个24小时的时间表。

因此,例如,有人可以在10:00开始工作,在19:00结束工作,所以很容易得到时差,因为结束时间和开始时间是同一天。但是,如果我有一个人从19:00开始工作到第二天04:00结束,我将得到一个负的时差。

我需要连续这样做,不是特定日期,但它必须每周重复一次。你能告诉我最好的方法是什么吗?

+------------------+-----+------------+----------+-----------+
| name             | day | start_time | end_time | total     |
+------------------+-----+------------+----------+-----------+
| Test01           | fri | 06:00:00   | 15:00:00 | 09:00:00  |
| Test             | fri | 07:00:00   | 16:00:00 | 09:00:00  |
| Test02           | fri | 08:00:00   | 14:30:00 | 06:30:00  |
| Pablo Quesada    | fri | 22:00:00   | 01:30:00 | -20:30:00 |
+------------------+-----+------------+----------+-----------+

我认为case语句可以满足您的需求:

select (case when start_time < end_time
             then timediff(end_time, start_time)
             else timediff(addtime(end_time, '24:00:00', start_time))
        end)

你可以使用一个简单的if语句:

SELECT IF( end_time > start_time,
           end_time - start_time,
           end_time + 240000 - start_time ) as total
FROM timetable;

您可以使用PHP的时间函数来完成此任务。time()返回1970年1月1日以来的秒数。

存储起始时间为(示例)

$startTime = time() + (2 * 3 * 20 * 43); // now + 2days, 3hrs, 20mins; 43secs

和它们的结束时间在此之后的某个时间。如果你用他们的结束时间减去他们的开始时间,结果总是一个正数,他们花在工作上的秒数。您也不需要day列,因为$time函数返回自1970年1月1日以来的秒数,因此您也可以在那里免费使用日期。

在您的UI中,您可以使用PHP的date函数将结果秒数格式化为可用的时间和日期。

感谢大家的反馈。在你的帮助下,我做了如下的事情:

select IF(end_time> start_time, TIMEDIFF (end_time,start_time), TIMEDIFF (addtime(end_time,'24:00:00'),start_time)) as Total_Hours从时间表;