Jump to content
Fórum Script Brasil
  • 0

Calcular Diferença entre horas


Question

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 to post
Share on other sites

6 answers to this question

Recommended Posts

  • 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other 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 to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      148680
    • Total Posts
      644501
×
×
  • Create New...