lusigmas 0 Denunciar post Postado Abril 2, 2010 Olá Pessoal! É a primeira vez em anos que posto uma dúvida pois geralmente encontro as soluções que preciso aqui, mas dessa vez já pesquisei muito inclusive lendo os manuais e não encontrei a resposta. Preciso de uma força: Questão: Tenho um formulário de busca que lista registros entre duas datas, que funciona se eu digitar a data em formato padrão Mysql = aaaa-mm-dd, porém eu preciso que o usuário digite a data em formato brasileiro dd/mm/aaaa. Como fazer? formulário: ------------- <form name="form1" method="post" action="relat_agenda.php"> <table width="680" border="0" align="center" cellpadding="0" cellspacing="0" class="gen"> <tr> <td height="30" colspan="3" class="gentextoform"> <div align="center">Digite o período desejado:</div></td> </tr> <tr class="gentextoform"> <td width="319" height="47"> <div align="right">de <input name="data1" type="text" id="data1" size="10" maxlength="10"> </div></td> <td width="41"><div align="center">até</div></td> <td width="320"><div align="left"> <input name="data2" type="text" id="data2" size="10" maxlength="10"> </div></td> </tr> <tr class="gentextoform"> <td colspan="3"><div align="center"> <input type="submit" name="Submit" value="Enviar"> </div></td> </tr> </table> </form> ----------- consulta: $data1 = $_POST['data1']; $data2 = $_POST['data2']; $consulta = mysql_query("SELECT * FROM cadastro WHERE hist_data1 BETWEEN '$data1' AND '$data2'"); ----------- Agradeço se puderem me auxiliar. Um abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Abril 2, 2010 Olha pode manter a data no formato americano no banco, usando 0000-00-00 e efetuar a busca neste formato 00/00/0000 você só tem que converter a data no servidor vou postar dois exemplos praticos de se fazer isso entre muitos 1º exemplo usando array_reverse $data1 = implode('-',array_reverse(explode('/',$_POST['data1']))); 2º exemplo usando strtotime e no meu ver a mais simples $date1 = date('Y-m-d', strtotime($_POST['data1'])); Ve se te ajuda as dicas! Compartilhar este post Link para o post Compartilhar em outros sites
lusigmas 0 Denunciar post Postado Abril 2, 2010 Olá PHP Programmer! Obrigada pelo apoio. Preciso de mais detalhes, pois não consegui fazer funcionar... Darei um exemplo: No formulário, se digito datas: de 2010-03-01 até 2010-03-15 consigo o resultado que desejo. Mas se eu digitar em formato brasileiro: de 01/03/2010 até 15/03/2010 o resultado é uma página em branco. Penso que o problema está no formulário, pois o resultado da busca vem no formato que desejo. Se as instruções que sugeriu devem ser inseridas no formulário, onde devo coloca-las? Desde já agradeço a paciência, hehe. Um abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Bruno Conte 4 Denunciar post Postado Abril 2, 2010 eu ja converto a data no cadastro: $data = date("Y-m-d"); // Essa parte do código determina o formato da data $hora = date("H:i:s"); // Aqui é determinado o formato da hora $novadata = substr($data,8,2) . "/" .substr($data,5,2) . "/" . substr($data,0,4);// Essa variável recebe a data atual que será mostrada entre barras $novahora = substr($hora,0,2) . "h" .substr($hora,3,2) . "min";// Essa variável recebe a nova hora que será mostrada com as configurações de horas e minutos acho mais facil na hora de fazer uma busca Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Abril 2, 2010 Olá @lusigmas Você pode efetuar a busca neste formato no formulário 02/04/2010 Ae o servidor ira converter a data automaticamente para o formato americano, não há a necessidade d utilizar formato brasileiro no banco de dados, pois já existe no mysql opção de campo de ser do tipo date fiz das duas maneiras do código abaixo, utilize a qual achar mas conviniente. $data1 = date('Y-m-d', strtotime($_POST['data1'])); $data2 = implode('-',array_reverse(explode('/',$_POST['data2']))); $consulta = mysql_query("SELECT * FROM cadastro WHERE hist_data1 BETWEEN '$data1' AND '$data2'"); @Bruno Conte Não vejo utilidade nisso, pois os bancos possuem campos para esses fins, como date, datetime e timestamp. e um simples NOW() já armazena a data do cadastro. Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Abril 2, 2010 WDuarte, a função strtotime() interpreta datas no padrão americano (mm/dd/yyyy). Ela não pode ser utilizada com datas no padrão brasileiro (dd/mm/yyyy) pois o dia e o mês são estão em posições diferentes. Para confirmar isso, veja este exemplo: <?php $teste1 = mktime( 0, 0, 0, 4, 2, 2010 ); // mktime() com a data 02 de Abril de 2010 $teste2 = strtotime( '02/04/2010' ); if ( $teste1 == $teste2 ) { echo 'A função strtotime() aceita o padrão brasileiro.'; } else { echo 'A função strtotime() não aceita o padrão brasileiro.'; } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Williams Duarte 431 Denunciar post Postado Abril 2, 2010 @André D. Molin Verdade errei, faltou uma função para efetuar a busca $date1 = date('Y-m-d', strtotime(str_replace("/", "-", $_POST['data1'] ))); porém o que ela quer é formatar uma string e não comparar um timestamp. ps.: Dá um desconto hoje é feriado! rsssssssss Compartilhar este post Link para o post Compartilhar em outros sites
André D. Molin 15 Denunciar post Postado Abril 2, 2010 Agora sim. Se fizer o teste que propus, agora com $teste2 = strtotime( '02-04-2010' );, irá retornar que é compativel. Compartilhar este post Link para o post Compartilhar em outros sites
lusigmas 0 Denunciar post Postado Abril 6, 2010 Caros, OBRIGADA! Funcionou. Grande abraço. Compartilhar este post Link para o post Compartilhar em outros sites
Edu Salinas 0 Denunciar post Postado Novembro 6, 2010 Olha pode manter a data no formato americano no banco, usando 0000-00-00 e efetuar a busca neste formato 00/00/0000 você só tem que converter a data no servidor vou postar dois exemplos praticos de se fazer isso entre muitos 1º exemplo usando array_reverse $data1 = implode('-',array_reverse(explode('/',$_POST['data1']))); 2º exemplo usando strtotime e no meu ver a mais simples $date1 = date('Y-m-d', strtotime($_POST['data1'])); Ve se te ajuda as dicas! Pra mim resolveu, estava com esse problema. Muito obrigado!!! Compartilhar este post Link para o post Compartilhar em outros sites