计算员工工作时间

oaxa6hgo  于 2021-10-10  发布在  Java
关注(0)|答案(0)|浏览(206)

我正试图找到一个解决方案,以获得总工作时间、迟到(分钟)、早退或未按时(分钟)和加班时间。
以下是我使用的函数:
午休时间:下午12:30
午休时间:下午1:30
办公室班次:周一至周五上午8:30至下午5:30
如果迟到时间超过30分钟,员工将自动迟到4小时:

$time_in_day = date('N', strtotime($time_in_date));
 $time_in = strtotime($time_in);

 $company_details = $this->get_data_details_one_parameter('company', 1);
 $start_lunch_break = strtotime($company_details[0]['START_LUNCH_BREAK']);
 $end_lunch_break = strtotime($company_details[0]['END_LUNCH_BREAK']);

 $office_shift_details = $this->get_data_details_two_parameter('office shift', $employee_id, $time_in_day);
 $office_shift_time_in = strtotime($office_shift_details[0]['TIME_IN']);

 if($time_in >= $end_lunch_break){
     $late = (round(($time_in - $end_lunch_break) / 3600, 2)) * 60;
 }
 else{
     $late = (round(($time_in - $office_shift_time_in) / 3600, 2)) * 60;
 }      

 if($late <= 0){
     $late = 0;
 }

 if($late > 30){
     $late = (round(($start_lunch_break - $office_shift_time_in) / 3600, 2)) * 60;
 }

 return $late;

对于计算早退/未充分工作时间,如果未充分工作时间>30分钟,员工将自动提前4小时:

$time_in_day = date('N', strtotime($attendance_time_out_date));
$attendance_time_out = strtotime($attendance_time_out);

$company_details = $this->get_data_details_one_parameter('company', 1);
$end_lunch_break = strtotime($company_details[0]['END_LUNCH_BREAK']);

$office_shift_details = $this->get_data_details_two_parameter('office shift', $employee_id, $time_in_day);
$office_shift_time_out = strtotime($office_shift_details[0]['TIME_OUT']);

$early_leaving = (round(($office_shift_time_out - $attendance_time_out) / 3600, 2)) * 60;

if($early_leaving <= 0){
    $early_leaving = 0;
}

if($early_leaving > 30){
    $early_leaving = (round(($office_shift_time_out - $end_lunch_break) / 3600, 2)) * 60;
}

return $early_leaving;

计算总工作时数:

$total_hours = 0;
$time_in_day = date('N', strtotime($attendance_time_in_date));

$office_shift_details = $this->get_data_details_two_parameter('office shift', $employee_id, $time_in_day);
$office_shift_time_in = strtotime($attendance_time_in_date . ' ' . $office_shift_details[0]['TIME_IN']);

$attendance_time_in = strtotime($attendance_time_in_date . ' ' . $attendance_time_in);
$attendance_time_out = strtotime($attendance_time_out_date . ' ' . $attendance_time_out);

$company_details = $this->get_data_details_one_parameter('company', 1);
$start_lunch_break = strtotime($attendance_time_in_date . ' ' . $company_details[0]['START_LUNCH_BREAK']);
$end_lunch_break = strtotime($attendance_time_in_date . ' ' . $company_details[0]['END_LUNCH_BREAK']);

if($attendance_time_in >= $end_lunch_break){
    if($attendance_time_in >= $office_shift_time_in){
        $time_in = $attendance_time_in - $end_lunch_break;
    }
    else{
        $time_in = $office_shift_time_in - $end_lunch_break;
    }
}
else{
    if($attendance_time_in >= $office_shift_time_in){
        $time_in = $attendance_time_in - $start_lunch_break;
    }
    else{
        $time_in = $office_shift_time_in - $start_lunch_break;
    }
}

if($attendance_time_out <= $start_lunch_break){
    $time_out = $attendance_time_out - $start_lunch_break;
}
else{
    $time_out = $attendance_time_out - $end_lunch_break;
}

$total_hours = (round(abs($time_in - $time_out) / 3600, 2));

if($total_hours <= 0){
    $total_hours = 0;
}

return floor($total_hours);

以下是我的困境:
我无法正确计算每天工作的总小时数,因为正如您在我的代码中所看到的,我总是以午休时间的总小时数为基础。
我无法取消同一日期多次进出的迟到和未到时间,例如:一名员工的时间为上午8:30,下午12:30,同一名员工的时间为下午1:30,下午5:30(同一日期)。该示例的输出将是数据库中的2个条目如果每天有多个时间输入和输出,如何取消迟到和未到时间?
产出1
日期时间:2021年7月27日
时间:上午8:30
暂停时间:下午12:30
迟到:0分钟
不足时间:240分钟/4小时
工作总时数:4小时
产出2
日期时间:2021年7月27日
时间:下午1:30
暂停时间:下午5:30
迟到:240分钟/4小时
不足时间:0分钟
工作总时数:4小时

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题