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










