Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gremio10

[Resolvido] Descobrir a diferença entre horas

Recommended Posts

Fala galera, estou com uma duvida, como faço para descobrir qual a diferença entre 2 pares de datas, e depois somar essas duas diferenças ?

 

exemplo:

 

hora 1 : 09:00:00, hora 2: 13:00:00, hora 3: 14:00:00, hora 4: 18:00:00

 

entre hora 1 e hora 2 tem 4:00:00, entre hora 3 e hora 4 tem outras 4 horas,

 

somando-as dá : 8:00:00...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

function diffHours($hourB, $hourS, $type=''){
   $time1 = explode(':', $hourB);
   $time2 = explode(':', $hourS);
   switch ($type) {
       case 'hours':
           $Q = 3600;
       break;
       case 'minutes':
           $Q = 60;
       break;
       default:
           $Q = 1;
   }
   return floor(((mktime($time1[0],$time1[1],$time1[2],0,0,0)-mktime($time2[0],$time2[1],$time2[2],0,0,0))/$Q));
}

Basicamente a mesma coisa da função de diferença de datas porém agora com horas.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
$nova_dt = '7'; // + sete dias apos hoje
echo "Hoje é: " . date("d/m/Y") . "<br>";
$proxima_data = mktime(0, 0, 0, date("m"),date("d") + $nova_dt, date("Y"));
echo "Daqui $nova_dt dias será: " . date("d/m/Y",$proxima_data);
$data = date("d/m/Y");
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olha eu faria assim

 

expero ter ajudados


// DIFERENCAO DE HORAS
$HoraEntrada = 09:00:00;
$HoraSaida = 13:00:00;

//SUBTRAINDO HORAS
$QtdHoras = substr($HoraSaida,0,2)-substr($HoraEntrada,0,2);//TEMOS 13-09 = 4;

//CASO HAVER SEGUNDOS
$QtdMinutos = substr($HoraSaida,3,5)-substr($HoraEntrada,3,5);

$TotalManha = ($QtdHoras*60)+$QtdMinutos;

//MESMO PROCESSO PARA TARDE

$TotalDia = ($TotalManha+$TotalTarde)/60;

//VERIFICA SE TEM VIRGULA E APRICA A REGRA DE 3
$NTotalDia = (explode(",",$TotalDia)*0.6)/100;


Compartilhar este post


Link para o post
Compartilhar em outros sites

Caras, todos os exemplos são ótimos, só que o problema seria assim:

 

eu hoje, cadastro a data, e hora de quando a pessoa se logou.

 

no final do dia, teria de ter as horas em que ela trabalhou, sabe ?

 

tipo, entrei as 9:10, mei intervalo foi as 12:10 e voltei as 13:03 e sai as 18:07, queria saber as horas trabalhadas...

Compartilhar este post


Link para o post
Compartilhar em outros sites

finalizando meu codigo

 


//VERIFICA SE TEM VIRGULA E APRICA A REGRA DE 3
$NTotalDia = explode(",",$TotalDia);
$TotalMinutos = ($NTotalDia[1]*0.6)/100;

echo "O funcionário trabalhou ".$NTotalDia[0]."horas e ".$TotalMinutos."Minutos";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esta ficou mais fácil ainda amigo gremio

 

function diffHours($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',(strtotime($hourA)-strtotime($hourB)));
}

echo diffHours(date('H:i:s'),'12:52:04');

A função pega a diferença mas nada impede

de você utiliza-la adaptando as suas necessidades.

Até porque ela também pode somar as horas ;)

 

Caso queira entender melhor o UTC:

 

Tempo Universal Coordenado

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

As datas e horas vem do banco, só que de campos diferentes, ou seja, date = data e time = hora...

 

não consegui com nenhum código que os amigos me indicaram, quando o valor é quebrado, ele entra en loop de numeros...

 

Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu concordo com esse... você pode simplismente fazer assim... usuário logou: registra hora, usuario deslogou: registra hora...

 

vamos supor que isso aconteceu 4 vezes...

 

você vai pegar o total de resultados registrados... e somar...

 

exemplo...

 

Lembrando q isso seria feito com update, ok? não insert... aí você insere a data de hoje e só faz os updates do que acontecer no dia... isso aki é algo fixo, a n ser q você queira algo mais dinamico, n vai rolar...

 

$minha_query = "PEGAR TUDO DO ID DESSE USUARIO NA DATA DE HOJE"....

 

$total_resultados = mysql_fetch_array($minha_query);

 

$total = ($data1 - $data2) + ($data3 - $data4);

 

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo gremio, não entendi qual foi o erro que ocorreu com a função que lhe mostrei no post 11.

Ela não da a diferença exata?? :huh: O Exemplo que dei foi com hora quebrada.

Poste o erro pois aqui funcionou perfeitamente.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seguinte :

 

meu array de horários:

 

Array
(
   [0] => 10:55:20
   [1] => 11:01:49
   [2] => 10:58:18
   [3] => 10:58:20
   [4] => 16:21:40
   [5] => 00:00:00
   [6] => 16:35:53
)

 

 

print_r($array);
print_r(diffHours($array[0],$array[1],"minutes")); // imprimiu -7

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo gremio, eu disse post 11 e ainda coloquei um link pra você visualizar o post 11.

A função que lhe mostrei no post 11 não tem 3 parametros e não vai retornar -7.

Você se quer leu o post ou testou a função ..... <_<

 

Também é óbvio que se o calculo é entre duas horas (horaA e horaB) se você analisar

a função vai perceber que tem de haver uma ordem dos parâmetros. Primeiro passa-se a

hora maior e depois a hora menor a menos que queira desenvolver uma rotina que descubra

qual das horas é a maior para fazer o calculo.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom...

 

Array
(
   [0] => 10:55:20
   [1] => 11:01:49
   [2] => 10:58:18
   [3] => 10:58:20
   [4] => 16:21:40
   [5] => 00:00:00
   [6] => 16:35:53
)
23:53:31


function diffHours($hourA, $hourB){
   date_default_timezone_set('UTC');
   return date('H:i:s',(strtotime($hourA)-strtotime($hourB)));
}


print_r($array);
print_r(diffHours($array[0],$array[1]));

 

agora não entendi...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.