Ir para conteúdo
Fórum Script Brasil
  • 0

Calcular Diferença entre horas


Heltinhu

Pergunta

oi galera tudo joinha, estou em um dilema faz horas aqui, seguinte....

estou em um projeto para uma empresa de cursos, estou querendo fazer o seguinte, eu cadastro em meu banco MYSQL os dados do aluno, por exemplo as horas que o aluno já fez o curso

exemplo.... tenho em meu banco a seguinte coluna - > horaPraticaCargaHoraria e a coluna horaTeoricaCargaHoraria - são campos time, ou seja só gravo as horas que o aluno já fez o curso

então o que quero é o seguinte, somar todas as horasPraticas que o aluno já fez e depois também as horasTeoricas ai depois eu faço o if para as devidas condiçoes tipo, se o aluno a concluiu as horas pratica e teoricas esta liberado para imprimir o certificado, se não ainda não

tipo cada curso tem a sua determinada carga horaria PRATICA e TEORICA

explicando o que já fiz

//Aqui tenho as horas vindas do banco de dados
//ESTAS HORAS SÃO REFERENTES AO CURSO - CADA CURSO TEM A SUA CARGA HORARIA
$horaPratica = $resultCursoAluno->horaPratica;
$horaTeorica = $resultCursoAluno->horaTeorica;


//AQUI CONSULTO NO BANCO DE DADOS
//AS DEVIDAS AULAS QUE O ALUNO já FEZ E SOMO AS AULAS já FEITAS NO WHILE
$soma = 0;
$horasFeitas = 0;
$sqlCargaHoraria = "select * from carga_horaria where idAlunoCargaHoraria = $idAluno AND idCursoCargaHoraria = '".$resultCursoAluno->idCurso."' ";
	$conectaCargaHoraria = $conecta->query($sqlCargaHoraria);
	while($resultCargaHoraria = $conectaCargaHoraria->fetch_object()){
		$horaPraticaFeita = strtotime($resultCargaHoraria->horaPraticaCargaHoraria);
		
		$horasFeitas += $horaPraticaFeita;
		 $soma += $horasFeitas;
	}
	echo $soma = date('H:i', $horasFeitas);

se conseguirem me ajudar agradeço

na teroria é isso, SOMAR AS HORAS ASSISTIDAS PELO ALUNO E DEPOIS FAZER UMA COMPARAÇÃO ENTRE A SOMA TOTAL DE AULAS ASSISTIDAS E AS HORAS QUE O CURSO EXIGE 

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

olha só como esta

<?php $consultCursoAluno = "select * from cursos inner join curso_escolhido ON (cursos.idCurso = curso_escolhido.idCursoPretendidoEscolhido) where idCursoAlunoEscolhido = '$idAluno' and checkedCursoEscolhido = '1'";
		$conectaCursoAluno = $conecta->query($consultCursoAluno);
		while($resultCursoAluno = $conectaCursoAluno->fetch_object()){?>

NomeCurso:<?php echo $resultCursoAluno->nomeCurso?>//Consigo pegar os cursos que o aluno está fazendo
<br>

<?php $sqlCurso = "select * from carga_horaria where idAlunoCargaHoraria = '$idAluno' and idCursoCargaHoraria = '".$resultCursoAluno->idCurso."'";
			$conectaCurso = $conecta->query($sqlCurso);
			$soma = 0;
				while($result = $conectaCurso->fetch_object()){//nesse while ele está transformando as horas em string e somando ele me da as horas em segundos total
					$horaPra = strtotime($result->horaPraticaCargaHoraria);
					$soma += $horaPra;
					$total = $soma;?>

HoraNormal - <?php echo $result->horaPraticaCargaHoraria?> - - - HoraString (<?php echo $horaPra?>)
<br>
				
<?php }?>
		<?php echo $soma?>//O problema esta aqui, quando vou transformar esta hora que esta em segundos para a hora normal (date('H:i:s', $soma)) não transforma e quando transforma fica tipo com um hora a mais, ai da uma bagunçada
		<br>
<?php }?>

 

Link para o comentário
Compartilhar em outros sites

  • 0

Qual o valor que esta retonando?

<?php 
$consultCursoAluno = "select * from cursos inner join curso_escolhido ON (cursos.idCurso = curso_escolhido.idCursoPretendidoEscolhido) where idCursoAlunoEscolhido = '$idAluno' and checkedCursoEscolhido = '1'";
$conectaCursoAluno = $conecta->query($consultCursoAluno);
while($resultCursoAluno = $conectaCursoAluno->fetch_object()){?>

	NomeCurso:<?= $resultCursoAluno->nomeCurso; //Consigo pegar os cursos que o aluno está fazendo ?><br>

	<?php 
	$sqlCurso = "select * from carga_horaria where idAlunoCargaHoraria = '$idAluno' and idCursoCargaHoraria = '".$resultCursoAluno->idCurso."'";
	$conectaCurso = $conecta->query($sqlCurso);
	$soma = 0;
		while($result = $conectaCurso->fetch_object()){//nesse while ele está transformando as horas em string e somando ele me da as horas em segundos total
			$horaPra = strtotime($result->horaPraticaCargaHoraria);
			$soma += $horaPra;
			$total = $soma;
			?>

			HoraNormal - <?= $result->horaPraticaCargaHoraria;?> - - - HoraString (<?= $horaPra?;>)<br>
					
		<?php 
		}
			
	echo $soma + "<br>";//O problema esta aqui, quando vou transformar esta hora que esta em segundos para a hora normal (date('H:i:s', $soma)) não transforma e quando transforma fica tipo com um hora a mais, ai da uma bagunçada
}?>

 

Link para o comentário
Compartilhar em outros sites

  • 0

tipo no meu banco de dados tenho cadastrado que o idAluno = 1 esta fazendo 2 cursos o Pá e Retro - Empilhadeira - Solda Industrial (com seus respectivos Ids) até aqui beleza

ele possui algumas horas cadastradas na tabela carga_horaria tipo 5 registros de 2 horas cada

tipo:

idALuno = 1

idCurso = 1

horaPratica = 02:00:00 - 02:00:00 - 02:00:00 - 02:00:00 - 02:00:00

horaTeorica = 02:00:00 - 02:00:00 - 02:00:00 - 02:00:00 - 02:00:00

ele teria que somar as horas(string)  praticas  que estão em e me dar o valor total da string certo

ele até soma todas, olha como está me retornando

NomeCurso:Pa
HoraNormal - 02:00:00 - - - HoraString (1583456400)
1583456400
HoraNormal - 02:00:00 - - - HoraString (1583456400)
3166912800
HoraNormal - 02:00:00 - - - HoraString (1583456400)
4750369200
HoraNormal - 02:00:00 - - - HoraString (1583456400)
6333825600
HoraNormal - 02:00:00 - - - HoraString (1583456400)
7917282000(soma total) AGORA QUANDO EU TENDO FORMATAR ESSA STRING PRA HORAS date('H:i:s', $soma) ME DA O VALOR DE 6:00:00

NomeCurso:Retro
NomeCurso:Empilhadeira
NomeCurso:Solda Industrial

 

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui mais ou menos isso aqui

<?php
$dataSoma  = new DateTime($total);
$dataSomaCarga   = new DateTime(date('15:00:00'));
$dateDiff = $dateStart->diff($dateNow);

// códigos do nosso exemplo acima
echo $result = $dateDiff->h . ' horas e ' . $dateDiff->i . ' minutos';
?>

ele até está somando, porem não é a soma correta, pois na $total esta vindo a soma do while acima como sendo igual a 6:00 quando na verdade seria 10:00 pois tenho 5 registros de 2:00 cada

então ele pega a $dataSoma (subtrai) $dataSomaCarga que virá do banco de dados referente a cada curso

e esta me devolvendo o valor da diferença ou seja = 9:0h

mais na verdade teria que ser 5:0h

pois 10h assistidas - 15h da carga horaria = 5h

Link para o comentário
Compartilhar em outros sites

  • 0

pelo que pude verificar agora, esta dando alguma coisa errada na hora de somar 

tipo ele transforma as horas em string e soma

<?php
	$testeHora = date('H:i:s',"1583456400");//Esta String é referente a 02:00:00
	
	echo $testeHora;//É igual a 02:00:00
	echo"<br>";?>

ai na hora de somar ele esta somando as strings 

1583456400 + 1583456400 + 1583456400 + 1583456400 + 1583456400 = 7917282000

e esta string 7917282000 quando trasformada é 06:00:00 e não 10:00:00

como consertar isso

Link para o comentário
Compartilhar em outros sites

  • 0

galera estou quase chegando lá aos trancos e barrancos é claro kkkk

olha o que tenho

<?php $sqlCurso = "select * from carga_horaria where idAlunoCargaHoraria = '$idAluno' and idCursoCargaHoraria = '$idCurso' ";
	$conectaCurso = $conecta->query($sqlCurso);?>
<!-- Soma_de_Horas-->
<?php
//é necessária uma data base (00:00:00) - $baseDate
//e uma data para adicionar/somar os tempos vindos do SGBD - $date
$baseDate = clone $date = \DateTime::createFromFormat('H:i:s' , '00:00:00');

//dados vindo do banco de dados
while($result = $conectaCurso->fetch_assoc()){
$arrayPraticaFeita[] = $result['horaPraticaCargaHoraria'];
$arrayTeoricaFeita[] = $result['horaTeoricaCargaHoraria'];
}
echo "HorasPraticadasPratica";
echo "<pre>";
print_r ($arrayPraticaFeita);
echo "</pre>";
//percorre cada valor do arrayPraticaFeita
foreach($arrayPraticaFeita as $time){
    //cria-se o date time com o tempo informado
    $dateTime = DateTime::createFromFormat('H:i:s' , $time);

    //realiza o diff com a $baseDate para criar o DateInterval
    $diff = $baseDate->diff($dateTime);

    //adiciona o diff ao DateTime que somará o tempo
    $date->add($diff);
}

//realiza o último diff entre o DateTime de soma e a base date
$interval = $baseDate->diff($date);

//DateInterval mantêm em dias (%a) tudo que for acima de 24 horas.
$hours = $interval->format('%H') + ($interval->format('%a') * 24);

//exibe o tempo
echo $hours.$interval->format(':%I');
echo "<br><br><br><br><br>";
	?>
<?php
$baseDateT = clone $dateT = \DateTime::createFromFormat('H:i:s' , '00:00:00');
echo "HorasPraticadasTeorica";
echo "<pre>";
print_r ($arrayTeoricaFeita);
echo "</pre>";
//percorre cada valor do arrayPraticaFeita
foreach($arrayTeoricaFeita as $timeT){
    //cria-se o date timeT com o tempo informado
    $dateTimeT = DateTime::createFromFormat('H:i:s' , $timeT);

    //realiza o diff com a $baseDate para criar o DateInterval
    $diffT = $baseDateT->diff($dateTimeT);

    //adiciona o diff ao DateTime que somará o tempo
    $dateT->add($diffT);
}

//realiza o último diff entre o DateTime de soma e a base date
$intervalT = $baseDateT->diff($dateT);

//DateInterval mantêm em dias (%a) tudo que for acima de 24 horas.
$hoursT = $intervalT->format('%H') + ($intervalT->format('%a') * 24);

//exibe o tempo
echo $hoursT.$intervalT->format(':%I');
echo "<br><br><br><br><br>";
	?>
<!-- SomadeHorasFim-->

explicando o que faz, ele está consultando em meu banco na tabela carga_horaria where o idAluno = 4 e o curso pretendido for igual ao id tal

esta somando certinho, montei ai acima esse array e usei estas funções para somar o array, ta belezinha, somando as horasPraticas e também as horasTeoricas

agora o B.O esta no seguinte esse array com os valores a ser somado esta dentro de um while onde eu busco os cursos que o aluno esta fazendo

e agora esse array se repete em todos os cursos, por exemplo o aluno esta fazendo 4CURSOS, mais ele só assistiu aula referente a 1CURSO

esse array pega as horas do curso e repete-o em todos os demais cursos que ele não assistiu ainda

me ajudem a arrumar isso pfv

segue o codigo completo....

<?php 
$consultCursoAluno = "select * from cursos inner join curso_escolhido ON(cursos.idCurso = curso_escolhido.idCursoPretendidoEscolhido) where curso_escolhido.idCursoAlunoEscolhido = '$idAluno' and curso_escolhido.checkedCursoEscolhido = '1'";
	$conectaCursoAluno = $conecta->query($consultCursoAluno);?>
<div class="jumbotron" style="border:0px blue solid">
<div class="col-sm-12 mx-auto" style="border:0px red solid; padding:1%">
<div class="card-group">

<?php while($resultCursoAluno = $conectaCursoAluno->fetch_object()){
	$idCurso = $resultCursoAluno->idCurso?>
<div class="col-md-3">
  <div class="card">
    <img class="card-img-top" src="../assets/images/sem_foto.png" alt="Card image cap">
    <div class="card-body">
      <h5 class="card-title"> <?php echo $resultCursoAluno->nomeCurso?> </h5>
	  <h6 style="font-size:0.8em">Horas Pratica - <span style="color:red"> hora</span> </h6>
	  <h6 style="font-size:0.8em">Horas Teorica - <span style="color:red"> hora </span> </h6>
	  <h6 style="font-size:0.8em">Simulador - <span style="color:red"> 00:00:00 </span> </h6>
      <p class="card-text"></p>
	  

<?php $sqlCurso = "select * from carga_horaria where idAlunoCargaHoraria = '$idAluno' and idCursoCargaHoraria = '$idCurso' ";
	$conectaCurso = $conecta->query($sqlCurso);?>
<!-- Soma_de_Horas-->
<?php
//é necessária uma data base (00:00:00) - $baseDate
//e uma data para adicionar/somar os tempos vindos do SGBD - $date
$baseDate = clone $date = \DateTime::createFromFormat('H:i:s' , '00:00:00');

//dados vindo do banco de dados
while($result = $conectaCurso->fetch_assoc()){
$arrayPraticaFeita[] = $result['horaPraticaCargaHoraria'];
$arrayTeoricaFeita[] = $result['horaTeoricaCargaHoraria'];
}
echo "HorasPraticadasPratica";
echo "<pre>";
print_r ($arrayPraticaFeita);
echo "</pre>";
//percorre cada valor do arrayPraticaFeita
foreach($arrayPraticaFeita as $time){
    //cria-se o date time com o tempo informado
    $dateTime = DateTime::createFromFormat('H:i:s' , $time);

    //realiza o diff com a $baseDate para criar o DateInterval
    $diff = $baseDate->diff($dateTime);

    //adiciona o diff ao DateTime que somará o tempo
    $date->add($diff);
}

//realiza o último diff entre o DateTime de soma e a base date
$interval = $baseDate->diff($date);

//DateInterval mantêm em dias (%a) tudo que for acima de 24 horas.
$hours = $interval->format('%H') + ($interval->format('%a') * 24);

//exibe o tempo
echo $hours.$interval->format(':%I');
echo "<br><br><br><br><br>";
	?>
<?php
$baseDateT = clone $dateT = \DateTime::createFromFormat('H:i:s' , '00:00:00');
echo "HorasPraticadasTeorica";
echo "<pre>";
print_r ($arrayTeoricaFeita);
echo "</pre>";
//percorre cada valor do arrayPraticaFeita
foreach($arrayTeoricaFeita as $timeT){
    //cria-se o date timeT com o tempo informado
    $dateTimeT = DateTime::createFromFormat('H:i:s' , $timeT);

    //realiza o diff com a $baseDate para criar o DateInterval
    $diffT = $baseDateT->diff($dateTimeT);

    //adiciona o diff ao DateTime que somará o tempo
    $dateT->add($diffT);
}

//realiza o último diff entre o DateTime de soma e a base date
$intervalT = $baseDateT->diff($dateT);

//DateInterval mantêm em dias (%a) tudo que for acima de 24 horas.
$hoursT = $intervalT->format('%H') + ($intervalT->format('%a') * 24);

//exibe o tempo
echo $hoursT.$intervalT->format(':%I');
echo "<br><br><br><br><br>";
	?>
<!-- SomadeHorasFim-->
    </div>
<!-- Button trigger modal -->
<button type="button" class="btn btn-lg btn-warning col-md-12" data-toggle="modal" data-target="#myModal<?php echo $resultCursoAluno->idCurso?>" data-whatever="<?php echo $resultCursoAluno->idCurso?>">
Lançar Aula
</button>
</div>
</div>
<?php }?>

 

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...