Gostaria de uma ajuda de vcs para um sistema que fiz, e que está apresentando um problema que não consigo identificar o que o estaria ocasionando.
É um sistema para cotação de passagem, onde um consultor envia a cotação e um responsável confirma esta cotação. O problema está nessa confirmação. A ideia é que quando o consultor envie a cotação, seja salvo no banco a data e hora do envio. Ao ser confirmada pelo responsável, pego também data e hora, e cálculo a diferença de tempo para resposta, para saber se houve quebra ou não (existe um tempo limite de resposta que define isto), e grava como "Sim" ou "Não" no banco de acordo com esse cálculo.
A questão é que algumas vezes dá certo, outras vezes não. Com algumas cotações que excedem o tempo limite, ele cálculo certo, sendo que com outras não. A princípio, o tempo calculado estaria correto, pois ele apresenta na tela a diferença correta.
Abaixo segue a função que está retornando a diferença entre as datas:
function calcula_tempo($solicitacao, $envio) { $date_time = new DateTime( $solicitacao ); $data_atualizada = $date_time->diff( new DateTime( $envio ) ); return $data_atualizada; }
Aqui, o código que fiz para poder verificar se houve quebra ou não. Basicamente, o tempo de quebra seria 3h 20min:
$data = calcula_tempo($monta['data_solicitacao'], $data_atual); $periodo = $data->format( '%d dia(s), %H hora(s), %i minuto(s) e %s segundo(s)' ); $dia = (int) $data->format('%d'); $hora = (int) $data->format('%H'); $minuto = (int) $data->format('%i'); if ($dia > 0) { $soma = (($dia * 24) + $hora) - ($dia * 15); $tempo = $soma.' hora(s),'.$minuto.' minuto(s)'; $quebra = "Sim"; } else { $array_data_solicitacao = explode(" ", $monta['data_solicitacao']); $array_dia_solicitacao = explode("-", $array_data_solicitacao[0]); $array_data_envio = explode(" ", $data_atual); $array_dia_envio = explode("-", $array_data_envio[0]); if ($array_dia_solicitacao[2] != $array_dia_envio[2]) { $hora_total = $hora - 15; if (($hora_total > 3) && ($minuto > 20)) { $quebra = "Sim"; } else { $quebra = "Não"; } $tempo = $hora_total.' hora(s),'.$minuto.' minuto(s)'; } else { $hora_total = $hora; if (($hora_total > 3) && ($minuto > 20)) { $quebra = "Sim"; } else { $quebra = "Não"; } $tempo = $hora.' hora(s),'.$minuto.' minuto(s)'; } } } $minutos_total = converte_hora_minuto($hora, $minuto);
Será que alguém teria alguma luz sobre o motivo disto estar ocorrendo?
Ok, eu sei que o código não está dos mais bonitos, nem dos mais funcionais. Mas, recém estava aprendendo a utilizar o "diff", essa foi a melhor forma que encontrei no momento para fazer isto.
Espero que possam me ajudar.
Abs