如何解决如何正确计算夜班时间
我想通过从表之类的日期中选择第一次进入和最后一次退出来获得正确的持续时间计算方法这种情况下
----------------------------------------------------
|id | type | timestamp | employee_id |
----------------------------------------------------
| 1 | timeout | 2020-07-20 07:00:00 | E0001 | <-- proper
| 2 | timein | 2020-07-19 23:00:00 | E0001 | <-- proper
| 3 | timein | 2020-07-20 22:00:00 | E0001 | <-- early
| 4 | timeout | 2020-07-20 23:00:00 | E0001 | <-- early
正确-按适当的时间表进行超时和超时
早期-发生这种情况的原因是紧急情况或员工生病了
在正确场景中,我快到了,但是当我尝试早在这种情况下进行计算
# if (last_timeout && nextdate_timeout) use nextdate
# When timeout timestamp both current date and next date exist,use it with current date
if($last_timeout && $next_date_last_timeout)
{
$last_timeout = $next_date_last_timeout;
}
# if (last_timeout && !nextdate_timeout) use last timeout
# When timeout timestamp current date is availble and next date is not,use it with current date
else if($last_timeout && !$next_date_last_timeout)
{
# get the last timeout
# this timeout using date the same with timein,to check if there's a timeout
$last_timeout = $this->getCheckIfNightShiftLogsAreCorrect($first_timein->timestamp,$last_timeouts->timestamp);
}
# if (nextdate_timeout & !last_timeout) use nextdate
else if(!$last_timeouts && $next_date_last_timeout)
{
$last_timeout = $next_date_last_timeout;
}
else
{
$last_timeout = $last_timeouts;
}
此条件用于获取具有临近轮班时间表的员工的上次上班时间,
- 如果上次超时时间与当前时间一起存在,并且表中的下一个日期存在,请获取上次超时时间的下一个日期。
- 如果上次超时与当前日期存在,但不存在于下一个日期,请获取上次超时时间戳为当前日期。
- 如果上次超时存在于下一个日期但不存在于当前日期,请获取下一个日期上次超时时间戳。
- 最后一次,使用上次超时的当前日期
我正在尝试按日期获取工期,但是当我从雇员中检索到他们的上次时间后使用“ DESC”时,它会显示一些错误的输出
first shift
Timein 2020-07-19 22:00:00
Timeout 2020-07-20 07:00:00
second shift -->early out
Timein 2020-07-20 22:00:00
Timeout 2020-07-20 23:00:00
问题
第一班,应该超时 2020-07-20 07:00:00 ,但突然之间,这需要 2020-07-20 23:00:00
在我的情况下,如何在这种情况下获得正确的计算
感谢谁能为我提供很多帮助。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。