Ir ao conteúdo

Posts recomendados

Postado

Pessoal boa noite

Poderiam me ajudar com este caso?

 

Estou com um problema para fazer a subtração de um intervalo de tempo. O sistema registra e calcula o horário de entrada e saída de um funcionário, mas só entrada e saída, sem intervalo. Fiz um código para tentar obter o valor total do tempo de entrada e saída do funcionário subtraindo o tempo que ele ficou em intervalo. Eu consegui fazer com que a marcação de inicio e final do intervalo fosse inserida no banco de dados e calculada, ou seja, o calculo do tempo de intervalo está funcionando corretamente. Meu problema está em fazer a subtração desse intervalo a partir do tempo total. Segue o código:

 

$breakstart = table::attendance()->where([['idno', $idno]])->value('breakstart');
$breakend = table::attendance()->where([['idno', $idno]])->value('breakend');
$um = Carbon::createFromFormat("H:i", $breakstart);
$dois = Carbon::createFromFormat("H:i", $breakend);
$breakin = $um->diffInHours($dois);
$breakout = floor(($um->diffInMinutes($dois) - (60 * $breakin)));
$breaktotal = $breakin.".".$breakout;

 

Com esse código acima eu obtive os valores dos registros de inicio e fim do intervalo ($breakstart e $breakend) e o tempo entre essas duas marcações eu obtive na variável $breaktotal. Funcionou usando H:i (hora e minutos) tanto quanto usando H:i:s (hora, minutos e segundos) mas optei por deixar apenas H:i.

 

Agora, o segundo código é onde está a variável ($totalhour) que registra o tempo total. Por padrão, está trazendo apenas o intervalo entre entrada e saída do funcionário sem intervalo. Daí, eu tentei colocar um código para subtrair o tempo de intervalo do tempo total. Funcionou pelo menos em parte, o que está acontecendo é o seguinte:

Ao marcar entrada às 07:00, inicio de intervalo às 13:00, final de intervalo às 14:03 e saída ás 19:00, o tempo total está ficando como 10hr7min. Quando na verdade deveria marcar 10hr57min pois dás 07:00 até 19:00 tem 12h, dás 13:00 até 14:03 tem 1h03, 12h - 1h03 ficariam 10h57.

Para fazer o tempo total e a subtração do intervalo, o código está assim:

 

$time1 = Carbon::createFromFormat("Y-m-d H:i:s", $timeIN);
$time2 = Carbon::createFromFormat("Y-m-d H:i:s", $timeOUT);
$th = $time1->diffInHours($time2);
$tm = floor(($time1->diffInMinutes($time2) - (60 * $th)));
$totalhour = ($th.".".$tm)-($breaktotal);

 

 

image.thumb.png.94ad8ea94018fab41769f1431f807236.png

 

 

  • Moderador
Postado

@tiagopraz Olá,

Não sei exatamente como implenentar do jeito que você está fazendo... mas aqui está um jeito bem simples e funcional... cabe você a  adaptar e implementar para seu propósito:

    //calcula o horário de trabalho  das 7h às 19h  = 12h
    $entrada = '07:00:00';
    $saida = '19:00:00';
    $hrTrabalho = date('H:i:s', strtotime($entrada) - strtotime($saida));
     
    //calcula o horário do intervalo. das 13h às 14:03h = 1h e 3min. Não sei porque mas cálculo só funciona invertido.
    $intervaloSai = '13:00:00';
    $intervaloEnt = '14:03:00';
    $hrIntervalo = date('H:i:s', strtotime($intervaloEnt) - strtotime($intervaloSai));
    
    //função para calcular o tempo total, baseado nos cálculos anteriores
    function calculaTempo($hrTrabalho,$hrIntervalo){
        $totalHour = date('H:i:s', strtotime($hrTrabalho) - strtotime($hrIntervalo));
        return $totalHour;  
    }
 
	
	echo calculaTempo($hrTrabalho, $hrIntervalo);

Testei e realmente deu 10:57:00   .. certamente tem N maneiras de fazer isso.. essa é a mais simples e "normal"  ..

 

spacer.png

 

Uma outra alternativa é você fazer os cálculos diretamente no SQL.  Lá você calcula o horário de trabalho,  o horário do intervalo e  depois pega ambos resultados e calcula o total.

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!