我必须为遍布全球的所有人员制定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 |
+------------------+-----+------------+----------+-----------+
答案 0 :(得分:0)
我认为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)
答案 1 :(得分:0)
您可以使用简单的if语句:
SELECT IF( end_time > start_time,
end_time - start_time,
end_time + 240000 - start_time ) as total
FROM timetable;
答案 2 :(得分:0)
您可以使用PHP's time function执行此任务。 time()
返回自1970年1月1日以来的秒数。
将开始时间存储为(示例)
$startTime = time() + (2 * 3 * 20 * 43); // now + 2days, 3hrs, 20mins; 43secs
他们的结束时间到那之后的一段时间。如果从结束时间中减去它们的开始时间,结果将始终是它们工作的正数秒。你也不需要day列,因为$ time函数返回自1970年1月1日以来的秒数,所以你也可以免费获得日期。
在您的用户界面中,您可以使用PHP's date function将生成的秒数格式化为可用的时间和日期。
答案 3 :(得分:0)
感谢您的反馈。在你的帮助下,我做了如下:
选择IF(end_time&gt; start_time,TIMEDIFF(end_time,start_time),TIMEDIFF(addtime(end_time,'24:00:00'),start_time))作为Total_Hours 从时间表;