Calculo de diferença de Horas - não faz correto
Caros amigos.
Recorro a ajuda dos amigos do grupo para que possam me auxiliar ou me dar uma luz no final do túnel.
Tenho uma rotina que faz um calculo de diferença de horas, como por exemplo:
Data Início: 21/06/2018 e Hora Início: 15:00
Data Fim...: 23/06/2018 e Hora Fim..: 13:00
Preciso que o sistema calcule que no dia: 23/06/2018 às 13:00 -> o status da cotação passa para 2, por exemplo.
Fiz uma rotina e aparentemente funciona, mas não entendo o porque algumas vezes faz o calculo e outras não.
Os campos na base de dados estão assim:
cotaDtInicio DATE NOT NULL ,
cotaHrsInicio TIME NOT NULL ,
cotaDtFim DATE NOT NULL ,
cotaHrsFim TIME NOT NULL ,
cotaStatus INT(1) NOT NULL
A rotina está assim:
<?php
//Paginação da página
$pag = isset($_GET['pag']) ? (int)$_GET['pag'] : 1;
$maximo = '10'; //RESULTADOS POR PÁGINA
$inicio = ($pag * $maximo) - $maximo;
$sql_pegaAtivos = "SELECT * FROM cotacao WHERE clientes_clienteId = '$userClientes_clienteId'
ORDER BY cotaNumero DESC LIMIT ".$inicio.','.$maximo;
try{
$query_pegaAtivos = $conecta->prepare($sql_pegaAtivos);
$query_pegaAtivos->bindValue(':clientes_clienteId',$userClientes_clienteId,PDO::PARAM_STR);
$query_pegaAtivos->execute();
$resultado_pegaAtivos = $query_pegaAtivos->fetchAll(PDO::FETCH_ASSOC);
$count_pegaAtivos = $query_pegaAtivos->rowCount(PDO::FETCH_ASSOC);
}catch(PDOexception $error_pegaAtivos){
echo 'Erro ao pegar ativos';
}
foreach($resultado_pegaAtivos as $resAtivos){
$cotaId = $resAtivos['cotaId'];
$cotaNumero = $resAtivos['cotaNumero'];
$cotaDtInicio = $resAtivos['cotaDtInicio'];
$cotaHrsInicio = $resAtivos['cotaHrsInicio'];
$cotaDtFim = $resAtivos['cotaDtFim'];
$cotaHrsFim = $resAtivos['cotaHrsFim'];
$cotaTitulo = $resAtivos['cotaTitulo'];
$cotaObserva = $resAtivos['cotaObserva'];
$cotaStatus = $resAtivos['cotaStatus'];
$clientes_clienteId = $resAtivos['clientes_clienteId'];
$desc_categ = $resAtivos['desc_categ'];
$desc_pgto = $resAtivos['desc_pgto'];
//Alterar o Status da Cotação para Analisar
if($cotaStatus == '1'){
//Pega o Horário Atual
date_default_timezone_set('America/Sao_Paulo');
//Calcula a Data Final com a Data Atual
$data_atual = date("Y-m-d");
$data_atual = strtotime($data_atual);
$dataFim = strtotime($cotaDtFim);
$diferenca = $data_atual - $dataFim;
$dias = floor($diferenca / 86400);
$faltaDias = "{$dias}";
//Calcula a Hora Final com a Hora Atual
$hora_atual = date("H:i:s");
$hora_atual = strtotime($hora_atual);
$horaFim = strtotime($cotaHrsFim);
$diferenca = $hora_atual - $horaFim;
$hora = floor($diferenca / 3600);
$minutos = floor(($diferenca / 60) % 60);
$segundos = floor($diferenca % 60);
$faltaHora = "{$hora}:{$minutos}:{$segundos}";
if ($faltaDias == '0' && $faltaHora >= '0') {
$cotaStatus = '2';
$sql_cota = 'UPDATE cotacao SET cotaStatus = :cotaStatus WHERE cotaId = :cotaId';
try{
$query_cota = $conecta->prepare($sql_cota);
$query_cota->bindValue(':cotaStatus',$cotaStatus,PDO::PARAM_STR);
$query_cota->bindValue(':cotaId',$cotaId,PDO::PARAM_STR);
$query_cota->execute();
} catch(PDOexception $error_novaCota) {
echo 'Erro ao Editar o Produto '.$error_novaCota->getMessage();
}
}
} elseif($cotaStatus > '1') {
$faltaDias = '0';
$faltaHora = '0';
}
}
?>
Como faço para que quando o usuário logar no sistema, possa automaticamente realizar este calculo de datas e horas ?
Grato,
RenatoDiscussão (2)
Carregando comentários...