Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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 }?>da esse erro
Warning: Use of undefined constant 23400 - assumed '23400'
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**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**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');$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
eita pega amigõ funfou certinho vlw pela ajuda, adaptei aqui e fez o que eu queria
Segue exemplo:
CÓDIGO:
<?php
// CONVERTE SEGUNDOS EM H:I:S
function converteSegundos($segundos)
{
$horasTeoricas = 23400; // 06:30:00
$horasTeoricasVIsualizadas = 18000; // 05:00:00;
// OBTEM DIFERENCA
$diferenca = $horasTeoricas - $horasTeoricasVIsualizadas;
// MOSTRA DIFERENCA
echo converteSegundos($diferenca); // 01:30:0