Получите часы задержки и дополнительные часы, используя библиотеку Carbon в Laravel - PullRequest
0 голосов
/ 22 ноября 2018

Я работаю над отчетом о посещаемости, и мне нужно отобразить время задержки и сверхурочные часы с использованием углерода, я вычисляю разницу между временем In и TimeOut, затем вычтите 1 час (обеденный перерыв), у меня возникла проблема с вычитанием 1час.

Во-вторых, как только вышеприведенное будет готово, мне нужно рассчитать реальное время прибытия и отъезда сотрудника и получить разницу, чтобы отработать часы.

      $timeIn = Carbon::createFromFormat('H:i', $hra_entrada_m); //08:00 am
      $timeOut = Carbon::createFromFormat('H:i', $hra_salida_t);  //17:30 pm

      $time1 =  $timeIn->diff($timeOut);          <- 9:30
      $time1 =  $time1->subtract(60, 'minutes');     <- problem   
      return  $time1->format('%H:%i');            ->should display 8:30


      $employeeTimeIn = Carbon::createFromFormat('H:i', $emp_time_in); //08:15 am
      $employeeTimeOut = Carbon::createFromFormat('H:i', $emp_time_out); //17:40 pm
      $time2 =  $employeeTimeIn->diff($employeeTimeOut);  

сейчас, чтобы получить разницу между временем1 и временем2я хочу преобразовать их в миллисекунды,

      $hours_worked = ($time1->milliseconds() - $time2->milliseconds() )

Изображение суммы ошибки: добавление два раза

1 Ответ

0 голосов
/ 22 ноября 2018

Проблема в вашем коде в том, что вы путаете объект возврата diff.diff Carbon не возвращает объект Carbon, но объект DateInterval.Этот объект не имеет функции sub.Итак, один из способов сделать это - сначала вычесть время из углерода, а затем вычислить разность.Это было бы примерно так:

$timeIn = Carbon::createFromFormat('H:i', '08:00'); //08:00 am
$timeOut = Carbon::createFromFormat('H:i', '17:30');  //17:30 pm

$time1 = $timeIn->diff($timeOut->subMinutes(60)); // <-8:30

Вторая проблема заключается в том, что класс DateInterval не имеет класса миллисекунд ().Таким образом, вам придется создать свой собственный.Здесь http://php.net/manual/pt_BR/dateinterval.format.php вы можете найти расчет.Итак, функция будет выглядеть следующим образом:

function dateIntervalToMilli($interval)
{
    $days = $interval->format('%a');
    $seconds = 0;
    if($days){
        $seconds += 24 * 60 * 60 * $days;
    }
    $hours = $interval->format('%H');
    if($hours){
        $seconds += 60 * 60 * $hours;
    }
    $minutes = $interval->format('%i');
    if($minutes){
        $seconds += 60 * $minutes;
    }
    $seconds += $interval->format('%s');
    $milliseconds = $seconds * 1000;
    return $milliseconds;
}

И теперь, используя эту функцию, вы можете сделать что-то вроде этого:

$employeeTimeIn = Carbon::createFromFormat('H:i', '08:15'); //08:15 am
$employeeTimeOut = Carbon::createFromFormat('H:i', '17:40'); //17:40 pm
$time2 =  $employeeTimeIn->diff($employeeTimeOut);  

$t1Milli = dateIntervalToMilli($time1);
$t2Milli = dateIntervalToMilli($time2);

$diffMilli = $t1Milli - $t2Milli;

И преобразовать $diffMilli в H: вы можетеиспользуйте:

$date = date("H:i", $diffMilli/1000);

Это основная идея.

...