E.Martins 0 Denunciar post Postado Junho 14, 2015 Estou com um problema para criar uma função para que puxe do banco de dados a data e compare com a data atual exibindo quantos dias falta para o vencimento do contrato, caso alguém tenha ideia do que estou falando da uma ajudinha ai. :D Segue o código que já to trabalhando: <?php include './connect/db_connect.php'; $connect = new mysqli($servername, $username, $password, $dbname) or die(mysqli_error()); $sql = mysqli_query($connect, "SELECT `ord`, `descricao`, `assintatura`, `vencimento` FROM `licitacao`"); if(mysqli_num_rows($sql)>0) { echo "<table>"; //Criamos a tabela //Aqui criamos o cabeçalho da tabela. // A tag <tr> abre uma linha, enquanto a <td> abre uma célula. echo "<tr>" ."<td class='center top_table'>Ordem</td>" ."<td class='center top_table'>Descrição</td>" ."<td class='center top_table'>Assinatura</td>" ."<td class='center top_table'>Vencimento</td>" ."<td class='status top_table'>Estatus</td>" ."</tr>"; // Fechamos o cabeçalho. } while($exibe=mysqli_fetch_array($sql)) { $id = $exibe['ord']; //Não exibi todos os dados, agora é só você completar, colocando cada célula dentro de um <td> echo "<tr>" ."<td class='center'>$exibe[ord]</td>" ."<td class='left'>$exibe[descricao]</td>" ."<td class='center'>$exibe[assintatura]</td>" ."<td class='center'>$exibe[vencimento]</td>" ."<td class='center'></td>" ."</tr>"; } // E fora do while fechamos a tabela. echo "</table>"; ?> Aguardo!!! Compartilhar este post Link para o post Compartilhar em outros sites
Diego Rinno 35 Denunciar post Postado Junho 14, 2015 Transforme a data num timestamp. Pode utilizar mktime() ou strtotime() para isso. Vou dar um exemplo usando o mktime(): OBS: Você precisa saber que o timestamp é o tempo calculado em segundos desde a era Unix. Sendo assim, um dia e igual a segundos x minutos x horas => 60*60*24 = 1 dia = 86400 segundos. <?php // Calcule o timestamp da hora que você capturou do banco de dados no formato abaixo: $hora = 0; $minuto = 0; $segundo = 0; $mes = 6; $dia = 20; $ano = 2015; $total = mktime($hora,$minuto,$segundo,$mes,$dia,$ano); // Diminua o tempo TOTAL pelo tempo ATUAL e obterá o resultado de dias que restam até a data final: $restam = $total - time(); // Divida o resultado em segundos pr 86400 e obterá o resultado em dias restantes: $restam = $restam / 86400; echo "Restam: ".$restam." dia(s) para o vencimento do boleto"; // Poderia, inclusive, ter feito tudo direto: echo "<hr>"; $restam = ((mktime($hora,$minuto,$segundo,$mes,$dia,$ano) - time()) / 86400); echo "Restam: ".$restam." dia(s) para o vencimento do boleto"; ?> Se fosse usar o strtotime seria assim: OBS: Nesse exemplo eu vou usar o round() pra arredondar o tempo e tornar mais amigável pro cliente. <?php // Calcule o timestamp da hora que você capturou do banco de dados no formato abaixo: $restam = ((strtotime("20-06-2015") - time()) / 86400); echo "Restam: cerca de ".round($restam)." dia(s) para o vencimento do boleto"; // No caso do strtotime a data tem que OBRIGATORIAMENTE ser no formato dd-mm-AAAA ?> Simples assim :) A diferença entre mktime() e strtotime() é que com o mktime() você pode editar a hora, minuto e segundo que vai usar pra calcular o tempo. Já no mktime vai sempre retornar a meia noite do dia escolhido. Com isso facilmente você cria uma função. Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 14, 2015 Obrigado Diego, mais na realidade estou tentando puxar a data final do banco mysql e não sei como usar ela para obter a data do vencimento. Esse é meu problema no banco estou puxando a data assim: $sql = mysqli_query($connect, "SELECT `ord`, `descricao`, `assintatura`, `vencimento` FROM `licitacao`"); esse vencimento ai quero puxar ele no mktime() ou no strtotime(), mais já quebrei a cabeça e não consigo. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Junho 14, 2015 Dentro do laço: strtotime($exibe['vencimento']) Compartilhar este post Link para o post Compartilhar em outros sites
E.Martins 0 Denunciar post Postado Junho 15, 2015 Fiz umas modificações no código mais ainda esta dando errado por que o formato do banco vem 20/02/2015, mais o PHP não reconhece e transforma em formato 02/20/2015 ai da um erro na exibição do vencimento do contrato. Segue código PHP: <?php date_default_timezone_set('America/Recife'); // Hora oficial do Brasil. include './connect/db_connect.php'; $connect = new mysqli($servername, $username, $password, $dbname) or die(mysqli_error()); $sql = mysqli_query($connect, "SELECT `ord`, `mod_num`, `cont_num`, `vencedor`, `assintatura`, `vencimento` FROM `licitacao`"); if(mysqli_num_rows($sql)>0) { echo "<table>"; //Criamos a tabela //Aqui criamos o cabeçalho da tabela. // A tag <tr> abre uma linha, enquanto a <td> abre uma célula. echo "<tr>" ."<td class='center top_table'>Nº</td>" ."<td class='center top_table'>Modalidade e Número</td>" ."<td class='center top_table'>Nº do Contrato</td>" ."<td class='center top_table'>Nome do Fornecedor</td>" ."<td class='center top_table'>Assinatura</td>" ."<td class='center top_table'>Vencimento</td>" ."<td class='status top_table'>Restam</td>" ."</tr>"; // Fechamos o cabeçalho. } while($exibe=mysqli_fetch_array($sql)) { $id = $exibe['ord']; $now = time(); // Salva o timestamp atual numa variável $datestr = strtotime('vencimento'); $remaining = $datestr - $now; $dias = $remaining / (24*60*60); $remaining -= ((int) $dias * (24*60*60)); //Não exibi todos os dados, agora é só você completar, colocando cada célula dentro de um <td> echo "<tr>" ."<td class='center'>$exibe[ord]</td>" ."<td class='left'>$exibe[mod_num]</td>" ."<td class='left'>$exibe[cont_num]</td>" ."<td class='left'>$exibe[vencedor]</td>" ."<td class='center'>$exibe[assintatura]</td>" ."<td class='center'>$exibe[vencimento]</td>" ."<td class='left'>" . (int) $dias . " dia(s) para o vencimento.</td>" ."</tr>"; } // E fora do while fechamos a tabela. echo "</table>"; ?> O timeleft esta sendo exibida assim "-16601 dia(s) para o vencimento.", um valor negativo exatamente pelo que citei acima. :assobiando: Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Junho 15, 2015 O correto seria utilizar um campo adequado para datas no BD, pelo visto está sendo usado um varchar... ai você tem duas alternativas, converter esta data que você do BD para o formado yyyy-mm-dd como explode/implode, ou dar uma olhada no manual, pois lá tem outras pessoas que passaram pela mesma situação que você. Compartilhar este post Link para o post Compartilhar em outros sites
vitorm11 3 Denunciar post Postado Junho 15, 2015 E.Martins você pode utilizar somente o MySQL para efetuar este calculo. A sentença está assim: SELECT `ord`, `mod_num`, `cont_num`, `vencedor`, `assintatura`, `vencimento` FROM `licitacao` Mude para: SELECT `ord`, `mod_num`, `cont_num`, `vencedor`, `assintatura`, `vencimento`, DATEDIFF(vencimento, CURDATE()) diasvencimento FROM `licitacao` Claro, isto funcionará caso o campo "vencimento" esteja como campo data. Qualquer dúvida é só chamar. Atenciosamente, Vitor M. Braga. Compartilhar este post Link para o post Compartilhar em outros sites