Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

labtech

[Resolvido] Subtração de Horas

Mensagens Recomendadas

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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);

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
$HoraEntrada = new DateTime('18:28:55');
$HoraSaida   = new DateTime('18:28:56');

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

  • Voto 1

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por Rui Carlos
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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.

Editado por Rui Carlos

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Editado por JoaoVM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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));

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo

e que tal :

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

Editado por HappyHippyHippo
  • Voto 2

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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros 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

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.