24小时制 - 时间差

时间:2015-08-15 19:35:52

标签: php mysql date

我必须为遍布全球的所有人员制定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 |
+------------------+-----+------------+----------+-----------+

4 个答案:

答案 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 从时间表;