我必须为分布在全球各地的所有人员建立一个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从时间表;