我必须找到一名员工的生产时间,完成项目需要多少小时和几分钟。
我的条件是,
1. I have start and end datetime of an employee
2. I have 3 break time.
3. The break times should be subtracted if break times is in between start and end time.
4. The working time is between 08:30 to 18:30, the time beyond this working time should be subtracted.
应该实现上述所有条件。我试图实现这一点但是为了一天工作代码工作正常。但是超过一天的休息时间只减去一次而且工作时间没有减去。
$start = "01-01-2018 09:00";
$end = "02-01-2018 18:30";
$break1_start = "11:00";
$break1_end = "11:15";
$break2_start = "13:00";
$break2_end = "13:30";
$break3_start = "16:00";
$break3_end = "16:15";
//work time
$break4_start = "18:30";
$break4_end = "08:30";
$break1 = 0;
$break2 = 0;
$break3 = 0;
$break4 = 0;
//Break 1
if($break1_start >= date("H:i", strtotime($start)) and $break1_start <= date("H:i", strtotime($end))) {
if($break1_end >= date("H:i", strtotime($start)) and $break1_end <= date("H:i", strtotime($end))) {
$break1 = strtotime($break1_end) - strtotime($break1_start);
}
else {
$end = date("H:i", strtotime($end));
$break1 = strtotime($break1_end) - strtotime($end);
}
}
else if($break1_end >= date("H:i", strtotime($start)) and $break1_end <= date("H:i", strtotime($end))) {
$start = date("H:i", strtotime($start));
$break1 = strtotime($break1_end) - strtotime($start);
}
//Break 2
if($break2_start >= date("H:i", strtotime($start)) and $break2_start <= date("H:i", strtotime($end))) {
if($break2_end >= date("H:i", strtotime($start)) and $break2_end <= date("H:i", strtotime($end))) {
$break2 = strtotime($break2_end) - strtotime($break2_start);
}
else {
$end = date("H:i", strtotime($end));
$break2 = strtotime($break2_end) - strtotime($end);
}
}
else if($break2_end >= date("H:i", strtotime($start)) and $break2_end <= date("H:i", strtotime($end))) {
$start = date("H:i", strtotime($start));
$break2 = strtotime($break2_end) - strtotime($start);
}
//Break 3
if($break3_start >= date("H:i", strtotime($start)) and $break3_start <= date("H:i", strtotime($end))) {
if($break3_end >= date("H:i", strtotime($start)) and $break3_end <= date("H:i", strtotime($end))) {
$break3 = strtotime($break3_end) - strtotime($break3_start);
}
else {
$end = date("H:i", strtotime($end));
$break3 = strtotime($break3_end) - strtotime($end);
}
}
else if($break3_end >= date("H:i", strtotime($start)) and $break3_end <= date("H:i", strtotime($end))) {
$start = date("H:i", strtotime($start));
$break3 = strtotime($break3_end) - strtotime($start);
}
//Work time
if($break4_start >= date("H:i", strtotime($start)) and $break4_start <= date("H:i", strtotime($end))) {
if($break4_end >= date("H:i", strtotime($start)) and $break4_end <= date("H:i", strtotime($end))) {
$break4 = strtotime($break4_end) - strtotime($break4_start);
}
else {
$end = date("H:i", strtotime($end));
$break4 = strtotime($break4_end) - strtotime($end);
}
}
else if($break4_end >= date("H:i", strtotime($start)) and $break4_end <= date("H:i", strtotime($end))) {
$start = date("H:i", strtotime($start));
$break4 = strtotime($break4_end) - strtotime($start);
}
$diff = strtotime($end) - strtotime($start);
$diff = $diff - $break1 - $break2 - $break3 - $break4;
$hours = floor($diff / 3600);
$minutes = floor(($diff / 60) % 60);
$seconds = $diff % 60;
echo "$hours:$minutes:$seconds";
从上面的代码中,
1. All the break time should be subtracted twice because break time comes twice in the given start and end time.
上述给定开始和结束时间的output
以及所有休息时间应为17:30:00
但是现在上面代码的输出是1458:30:0
。
如何实现我的条件和输出?我真的被困在这里了。任何人都可以帮助我。谢谢。
答案 0 :(得分:1)
根据您的条件4,&#34;工作时间为08:30至18:30,应减去超出此工作时间的时间。&#34;但是你的开始日期是var ourstring = " (1); (2);; (3) ; (4) ;; (5) ; ; (6); ; (7); ;; (8)";
var re = /\)\s*;+/g;
var result = ourstring.replace(re, ")");
console.log(result);
我认为它应该是$start = "01-01-2018 09:00";
而你的休息时间应该是$start = "01-01-2018 08:30";
:
break4_..
我以分钟为单位计算了总工作时间和休息时间,之后将以小时和分钟为单位进行更改。
根据这些假设,我试图计算总工时和分钟。
$break4_start = "18:30";
$break4_end = "08:30";