Ir para conteúdo
helkton

Resolvido - Calcular Diferença entre horas

Recommended Posts

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

<?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 }?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo:

 

CÓDIGO:

<?php

// CONVERTE SEGUNDOS EM H:I:S
function converteSegundos($segundos)
{
	$data1 = new DateTime("@0");
	$data2 = new DateTime("@$segundos");

	return $data1->diff($data2)->format('%H:%i:%s');
}

$horasTeoricas = 23400; // 06:30:00
$horasTeoricasVIsualizadas = 18000; // 05:00:00;

// OBTEM DIFERENCA
$diferenca = $horasTeoricas - $horasTeoricasVIsualizadas;

// MOSTRA DIFERENCA
echo converteSegundos($diferenca); // 01:30:0

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Segue exemplo, abaixo:

 

TABELAS E DADOS A SER UTILIZADOS:

CREATE TABLE cursos (
	idCurso INT NOT NULL AUTO_INCREMENT,
	nomeCurso VARCHAR(50) NOT NULL,
	PRIMARY KEY(idCurso)
);
INSERT INTO cursos (nomeCurso) VALUES
('Sociologia');

CREATE TABLE curso_escolhido (
	idEscolhido INT NOT NULL AUTO_INCREMENT,
	idCursoPretendidoEscolhido INT NOT NULL,
	idCursoAlunoEscolhido INT NOT NULL,
	checkedCursoEscolhido INT NOT NULL,
	PRIMARY KEY(idEscolhido),
	FOREIGN KEY (idCursoPretendidoEscolhido) REFERENCES cursos (idCurso)
);
INSERT INTO curso_escolhido (idCursoPretendidoEscolhido, idCursoAlunoEscolhido, checkedCursoEscolhido) VALUES
(1, 1, 1);

CREATE TABLE carga_horaria (
	idCarga INT NOT NULL AUTO_INCREMENT,
	idAlunoCargaHoraria INT NOT NULL,
	idCursoCargaHoraria INT NOT NULL,
	horaPraticaCargaHoraria TIME NOT NULL,
	PRIMARY KEY(idCarga),
	FOREIGN KEY (idCursoCargaHoraria) REFERENCES cursos (idCurso)
);
INSERT INTO carga_horaria (idAlunoCargaHoraria, idCursoCargaHoraria, horaPraticaCargaHoraria) VALUES
(1, 1, '02:00:00'),
(1, 1, '02:00:00'),
(1, 1, '02:00:00'),
(1, 1, '02:00:00'),
(1, 1, '02:00:00');

 

PHP:

<?php

// PARA EXEMPLO
$idAluno = 1;
$conecta = new mysqli('localhost', 'root', '', 'seu_db');
// PARA EXEMPLO

$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()){?>

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

	<br>

	<?php
	$sqlCurso = "
		select
			*
		from
			carga_horaria
		where
			idAlunoCargaHoraria = '$idAluno' and
			idCursoCargaHoraria = '".$resultCursoAluno->idCurso."'
		"
	;

	$conectaCurso = $conecta->query($sqlCurso);
	$soma = 0;

	//
	$paraSubtrair = new DateTime('@0');
	$totalHoras = new DateTime('@0');
	//

	while($result = $conectaCurso->fetch_object()){
		// OBTEM O TEMPO E ARMAZENA
		$horaPra = $result->horaPraticaCargaHoraria;
		// SEPARA EM PARTES A STRING
		$partes = explode(':', $horaPra);

		// CRIA INTERVALO
		$intervalo = new DateInterval(
			'PT' . (int)$partes[0] . 'H' . $partes[1] . 'M' . $partes[2] . 'S'
		);

		// ADICIONA O INTERVALO NO TOTAL
		$totalHoras->add($intervalo);
		?>

	<?php }?>

	<?php
		$diferenca = $paraSubtrair->diff($totalHoras);
		echo "========[ TOTAL ]========<br/>";
		echo $diferenca->format('%d Dia(s), %H Hora(s), %i Minuto(s) e %s Segundo(s)');
		echo "<br/>";
		echo "Dias: " . $diferenca->d;
		echo "<br/>";
		echo "Horas: " . $diferenca->h;
		echo "<br/>";
		echo "Minutos: " . $diferenca->i;
		echo "<br/>";
		echo "Segundos: " . $diferenca->s;
	?>

	<br>

<?php }?>

 

RESULTADO:

NomeCurso: Sociologia
========[ TOTAL ]========
0 Dia(s), 10 Hora(s), 0 Minuto(s) e 0 Segundo(s)
Dias: 0
Horas: 10
Minutos: 0
Segundos: 0

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por landerbadi
      Boa tarde pessoal. Estou tentado fazer uma consulta no banco de dados porém estou tendo dificuldades. Tenho uma tabela chamada "itens" com os seguintes campos: id, item, ativo. Nela tem cadastrado vários itens. No campo ativo eu coloco a letra "S" para informar que este item está ativo no sistema. Por exemplo: 1, casa, S 2, mesa, S 3, cama, S 4, moto S 5, rádio O quinto registro "radio" não está ativo no sistema pois não tem um "S" no campo ativo. E outra tabela chamada "produtos" com os seguintes campos (id, item1, item2, item3) com os seguintes registros: 1, casa, mesa, moto 2, mesa, casa, cama 3, rádio, cama, mesa Eu preciso fazer uma busca na tabela produtos da seguinte maneira: Eu escolho um registro na tabela "itens", por exemplo "mesa". Preciso fazer com que o php me liste todos os registros da tabela "produtos" que contenham a palavra "mesa". Até aqui tudo bem eu consigo listar. Estou fazendo assim: <?php $item = "mesa" $sql = mysqli_query($conn, "SELECT * FROM produtos WHERE item1 LIKE '$item' OR item2 LIKE '$item' OR item3 LIKE '$item' LIMIT 10"); while($aux = mysqli_fetch_assoc($sql)) { $id = $aux["id"]; $item1 = $aux["item1"]; $item2 = $aux["item2"]; $item3 = $aux["item3"]; echo $id . " - " . $item1 . ", " . $item2 . ", " $item3 . "<br>"; } ?> O problema é que está listando todos os registros que contém o item mesa. Eu preciso que o php verifique os demais item e me liste somente os registro em que todos os registros estejam ativos no sistema. No exemplo acima ele não deveria listar o registro 3. pois nesse registro contém o item "radio" e este item não está ativo no sistema. Ou seja, o registro "radio" na tabela itens não possui um "S" na coluna "ativo". Alguém sabe como resolver isso?
    • Por ILR master
      Fala galera.
      Espero que todos estejam bem.
      Seguinte: Tenho um arquivo xml onde alguns campos estão com : (dois pontos), como o exemplo abaixo:
       
      <item>
      <title>
      d sa dsad sad sadasdas
      </title>
      <link>
      dsadas dsa sad asd as dsada
      </link>
      <pubDate>sadasdasdsa as</pubDate>
      <dc:creator>
      d sad sad sa ad as das
      </dc:creator>
      </item>
       
      Meu código:
       
      $link = "noticias.xml"; 
      $xml = simplexml_load_file($link); 
      foreach($xml -> channel as $ite) {     
           $titulo = $ite -> item->title;
           $urltitulo = $ite -> item->link;
           print $urltitulo = $ite -> item->dc:creator;
      } //fim do foreach
      ?>
       
      Esse campo dc:creator eu não consigo ler. Como faço?
       
      Agradeço quem puder me ajudar.
       
      Abs
       
       
    • Por First
      Olá a todos!
       
      Eu estou criando um sistema do zero mas estou encontnrando algumas dificuldades e não estou sabendo resolver, então vim recorrer ajuda de vocês.
      Aqui está todo o meu código: https://github.com/PauloJagata/aprendizado/
       
      Eu fiz um sistema de rotas mas só mostra o conteúdo da '/' não sei porque, quando eu tento acessar o register nada muda.
      E eu também quero que se não estiver liberado na rota mostra o erro de 404, mas quando eu tento acessar um link inválido, nada acontece.
      Alguém pode me ajudar com isso? E se tiver algumas sugestão para melhoria do código também estou aceitando.
       
       
      Desde já, obrigado.
×

Informação importante

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