Jump to content
labtech

[Resolvido] Subtração de Horas

Recommended Posts

labtech

Boas. Estou aqui com um problema em que preciso de fazer subtração da hora de entrada de uma pessoa e a hora de saída da mesma. As horas estão a ser guardadas numa base de dados Mysql, e depois digo ao php para ir buscar as horas(entrada e saída), fazer subtração e escrever no mysql.

Mas ainda não encontrei uma boa maneira do o fazer.

Hora Entrada -> 15:55:06

Hora Saída -> 15:55:09

Tempo Presente -> 1382885709

Gostaria de o tempo presente fosse apresentado assim:

Tempo Presente -> 00:00:03

Fórmula que estou a usar para o cálculo:

$diffHoras = (strtotime($horaSaida) - strtotime($HoraEntrada))-3600;

Obrigado

Share this post


Link to post
Share on other sites
labtech

HoraEntrada -> 16:20:08

HoraSaida -> 16:20:11

Hora diferenca -> 01:00:15

Ao menos ficou com o formato certo, mas o resultado está errado :\

$diffHoras = (strtotime($horaSaida) - strtotime($HoraEntrada))-3600;
$output = date('H:i:s', $diffHoras);

Share this post


Link to post
Share on other sites
labtech

Porque encontrei num topico do stackoverflow, mas também tirando o 3600. Não dá direito á mesma.

Share this post


Link to post
Share on other sites
HappyHippyHippo

Porque encontrei num topico do stackoverflow, mas também tirando o 3600. Não dá direito á mesma.

se tirares os 3600 fica correcto ... verifica novamente


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
labtech

Antes não estava a dar direito pois tinha HoraEntrada e devia ser horaEntrada. Ter mais atenção como declaro as variáveis...

Obrigado HappyHippyHippo

HoraEntrada 18:28:55

HoraSaida 18:28:56

Hora diferenca 01:00:01

Formula:

$output = (strtotime($horaSaida) - strtotime($horaEntrada));
$diffHoras = date('H:i:s', $output);

Ele está a dar 1 hora a mais :\

Eu tenho 2 php's: login.php e sair.php

No login.php escreve no mysql, a hora de entrada..

No sair.php verifica se cookie de login existe, se sim escreve a hora de saída no mysql, depois o php vai buscar a hora de saída e a hora de entrada. Faz a diff com a formula em cima.

Ambos os php's têm: date_default_timezone_set('Europe/Lisbon');

Mesmo assim dá 1hora de diferença.

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo
$HoraEntrada = new DateTime('18:28:55');
$HoraSaida   = new DateTime('18:28:56');

$diffHoras = $HoraSaida->diff($HoraEntrada)->format('%H:%I:%S');

  • Vote 1

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
labtech

Resolvido

Codigo:

function checktime($aux) {
$aux=explode(':',$aux);
if ($aux[0]!=00){ //horas 1º campo
echo $nome."\nPermaneceu ".$aux[0]." horas e ".$aux[1]." minutos e ".$aux[2]." segundos";
}
else if ($aux[1]!=00){ //minutos 2º campo
echo $nome."\nPermaneceu ".$aux[1]." minutos e ".$aux[2]." segundos";
}
else if ($aux[2]!=00){ //segundos 3º campo
echo $nome."\nPermaneceu ".$aux[2]." segundos";
}
}
$diffHoras = date('H:i:s',(strtotime($horaSaida) - strtotime($horaEntrada))-3600);
echo "<br>Tempo Presente " . $diffHoras . "<br>HoraEntrada " . $horaEntrada . "<br>HoraSaida " . $horaSaida . "<br><br>";
checktime($diffHoras);

HoraEntrada 21:09:50

HoraSaida 21:09:51

Tempo Presente 00:00:01

Permaneceu 01 segundos <-- Da função checktime

Obrigado a todos que ajudaram

Edited by Rui Carlos
GeSHi

Share this post


Link to post
Share on other sites
JoaoVM

Pessoal, estou com um problema muito parecido e não estou a conseguir resolver:

O objetivo é a cada período de 1h calcular um campo através dessa variável $p6,esta variável representa o período das 11h as 12h, por exemplo quando o colaborador dá a entrada quero saber o tempo útil de trabalho dele nessa hora, ou seja, no período 6 que é das 11h as 12h se ele entra as 11h45, apenas tem um tempo útil de trabalho de 15 minutos, mas não estou a conseguir resolver através da minha formula.

echo date('H:i:s | ');
$horaEntrada = new DateTime(date('H:i:s'));
$horaSaida = new DateTime('12:00:00');
echo $diffHoras = date('H:i:s',(strtotime($horaSaida) - strtotime($horaEntrada)));
//
//CODIGO COM VARIAS CONDICOES DE HORAS DIFERENTES//

elseif ($hora_entrada1 >= '11:00:00' && $hora_entrada1 <= '12:00:00') {
$p1='00:00:00';
$p2='00:00:00';
$p3='00:00:00';
$p4='00:00:00';
$p5='00:00:00';
$p6=$diffHoras;
$p7='01:00:00';
$p8='01:00:00';

}

O resultado deveria ser 00:05:46 em vez de 01:00:00.

O resultado que obtenho é 11:54:14 | 01:00:00.

Edited by Rui Carlos

Share this post


Link to post
Share on other sites
HappyHippyHippo

$HoraEntrada = new DateTime('18:28:55');
$HoraSaida   = new DateTime('18:28:56');

$diffHoras = $HoraSaida->diff($HoraEntrada)->format('%H:%I:%S');


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JoaoVM

$HoraEntrada = new DateTime('18:28:55');
$HoraSaida   = new DateTime('18:28:56');
$diffHoras = $HoraSaida->diff($HoraEntrada)->format('%H:%I:%S');

$horaEntrada = new DateTime(date('H:i:s'));
$horaSaida = new DateTime('13:00:00');

// ASSIM MOSTRA 00305
echo $horaSaida->diff($horaEntrada)->format('%H%i%s');

//ASSIM MOSTRA 01:48:41
echo date('H:i:s',$horaSaida->diff($horaEntrada)->format('%H%i%s'));

As contas assim não ficam bem feitas...não tenho o resultado correto

Edited by JoaoVM

Share this post


Link to post
Share on other sites
HappyHippyHippo

mas que raio de chamada de output é essa ?

não foi isso que apresentei no exemplo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JoaoVM

Apenas estava a tentar dar logo o output com o formato dos minutos, mas já consegui, ficou assim:

$horaEntrada = new DateTime(date('H:i:s'));
$horaSaida   = new DateTime('14:00:00');
$saida = $horaSaida->diff($horaEntrada)->format('%H%I%S');
echo date('H:i:s',strtotime($saida));

Share this post


Link to post
Share on other sites
HappyHippyHippo

e que tal :

echo $horaSaida->diff($horaEntrada)->format('%H:%I:%S');

Edited by HappyHippyHippo
  • Vote 2

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
JoaoVM

Hum está bom escuso de andar com o date('H:i:s'), não me estava a funcionar essa parte porque tinha:

//TINHA ISTO
format('%H%I%S');
//EM VEZ DE ISTO
format('%H:%I:%S');

Obrigado a Todos pela ajuda

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.