根据开始时间和结束时间查找生产时间php

时间:2018-03-04 07:25:00

标签: php

我必须找到一名员工的生产时间,完成项目需要多少小时和几分钟。

我的条件是,

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

如何实现我的条件和输出?我真的被困在这里了。任何人都可以帮助我。谢谢。

1 个答案:

答案 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";

DEMO