LEO8789 0 Denunciar post Postado Junho 24, 2009 Sei que ja existem muitos topicos sobre isso mas ate agora nenhum ajudou o que eu gostaria de fazer é num campo input inserir uma data em formato brasileiro no mysql atraves de php dd/mm/yyyy, sei como fazer ela aparecer no formato brasileiro na hora de listar meu problema é trocar o formato de data do brasileiro para o americano na hora de inserir no bd Compartilhar este post Link para o post Compartilhar em outros sites
Paulo Afonso 0 Denunciar post Postado Junho 24, 2009 function data2iso($str) { $data = explode("/",$str); return $data[2] . "-" . $data[1] . "-" . $data[0]; } dai é só na hora de inserir você utilizar $dataparabd = data2iso($inputdata); Compartilhar este post Link para o post Compartilhar em outros sites
Will Fernando 2 Denunciar post Postado Junho 24, 2009 utilize essas duas funções... function DataDB2BR($datapega) { $data = explode('-',$datapega); $datacerta = $data[2].'/'.$data[1].'/'.$data[0]; return $datacerta; } function DataBR2DB($datapega) { $data = explode('/',$datapega); $datacerta = $data[2].'-'.$data[1].'-'.$data[0]; return $datacerta; } modo de usar (exemplo): echo DataDB2BR($data); valww Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 24, 2009 Dependendo do SGBD, dá para usar as funções de data/hora. No caso do MySQL, pode usar STR_TO_DATE() Compartilhar este post Link para o post Compartilhar em outros sites
LEO8789 0 Denunciar post Postado Junho 24, 2009 function data2iso($str) { $data = explode("/",$str); return $data[2] . "-" . $data[1] . "-" . $data[0]; } dai é só na hora de inserir você utilizar $dataparabd = data2iso($inputdata); INSERT INTO tabela (data) VALUES ('$dataparabd'); é isso nao é? tentei mas nao deu certo ate insere a data mas uma que nao tem nada ver tipo 11/12/1999 volto a repetir preciso que quando digite uma data assim 10/12/2009 insira assim no bd 2009/12/10 Compartilhar este post Link para o post Compartilhar em outros sites
WarLiKe 0 Denunciar post Postado Junho 24, 2009 Eu acredito que o banco só trabalhe com datas recebidas no formato EN com traço "-" e nao com barra, e que seja possivel só mostrar (select) em formato personalizado Mas porque colocar a data nesse formato no banco? você vai visualizar os registros sempre por lá? Compartilhar este post Link para o post Compartilhar em outros sites
Fabricio Ribas 0 Denunciar post Postado Junho 24, 2009 Eu também estava atrás disso, achei várias alternativas (algumas para diferentes versões de php), e acabei adaptando 1 de uma maneira que talvez não seja a mais prática, ou mais didática, mas foi a que eu achei mais fácil de entender Primeiro. Tem o campo input. Eu usei uma função que peguei na net para máscara de CPF e adaptei para campos data. Não lembro o site que peguei, por isso não vou colocar os créditos, mas o campo input fica assim: <input name='data_venc' type='text' id='data_venc' onkeypress='mascara(this,tipodata)' size='10' maxlength='10'>coloquei maxlenght = 10 para que o usuário não digite mais que 10 "digitos". Nesse caso, ele não precisará digitar as '/' pois a máscara coloca automaticamente. Como a dúvida não é sobre a máscara, não vou explicar a função em JavaScript. Basta colocar o trecho de código abaixo na área <head> de seu documento. <script> function mascara(o,f){ v_obj=o v_fun=f setTimeout("execmascara()",1) } function execmascara(){ v_obj.value=v_fun(v_obj.value) } function leech(v){ v=v.replace(/o/gi,"0") v=v.replace(/i/gi,"1") v=v.replace(/z/gi,"2") v=v.replace(/e/gi,"3") v=v.replace(/a/gi,"4") v=v.replace(/s/gi,"5") v=v.replace(/t/gi,"7") return v } function tipodata(v){ v=v.replace(/\D/g,"") //Remove tudo o que não é dígito v=v.replace(/(\d{2})(\d)/,"$1/$2") //Coloca uma barra entre o segundo e o terceiro dígito v=v.replace(/(\d{2})(\d)/,"$1/$2") //Coloca uma barra entre o quarto e o quinto dígito return v } </script> Bom, com a data informada corretamente, vamos à parte da gravação na base de dados. Como você já falou, um campo criado no MYSQL como tipo DATE, é armazenado na base de dados sempre no formato YYYY-MM-DD. Então precisamos transformar essa data informada ANTES de gravar. Bom. Eu trabalho com um arquivo para o formulário, e na definição do formulário, eu informo o nome do arquivo que irá gravar efetivamente os dados, e fazer uma validação dos dados antes de gravá-los. Ex.: <form action=grava.php>. É nesse arquivo grava.php, que iremos transformar a data informada pelo usuário. Para isso utilizaremos a função abaixo, que simplesmente "fatia" a data informada pelo usuário, usando como referência o caracter '/'. A máscara acima é util, pois em alguns casos, alguns usuários poderiam informar a data usando outros delimitadores, como 17-10-1972 ou 18.09.1981, e nesse caso a conversão não funcionaria. Então é melhor garantir do que remediar :) Após fatiar, temos um array com as 3 informações necessárias (dia, mês e ano). Para um melhor entendimento, criei uma variável para cada uma delas. Em seguida, essas variáveis são concatenadas novamente, usando o caracter '-' como separador e na ordem que o MySQL necessita. /*///////////////////////////////////////////// /// FUNCAO PARA CONVERTER DATA PARA O MYSQL /// /////////////////////////////////////////////*/ function converter_data($dat){ // Recebemos a data no formato: dd/mm/aaaa // Convertemos a data para o formato: aaaa-mm-dd $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; return $y.'-'.$m.'-'.$d; } Antes de gravar o campo na base de dados, basta chamar essa função, passando a data que o usuário informou como parâmetro: $venc = converter_data($data_venc); // Converte a data BR para o formato MySQL Nesse caso, a variável $venc já está transformada para o formato exigido pelo MySQL. Mas o script ainda pode não funcionar direito, pois o usuário ainda pode digitar alguma coisa que não seja uma data válida no campo input, como por exemplo 66-58-1987. Nesse caso, seria indicado fazer uma Verificação se essa informação é uma data válida. Para isso, tem outra funçãozinha básica, também em PhP. Basta usar a função checkdate() do php, mas para isso temos que fatiar a string novamente. /*////////////////////////////// /// FUNCAO PARA VALIDAR DATA /// //////////////////////////////*/ function ValidaData($dat){ $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; // verifica se a data é válida! // 1 = true (válida) // 0 = false (inválida) $res = checkdate($m,$d,$y); if ($res == 1){ return 1; } else { return 0; } } O resultado final ficaria mais ou menos assim: <?php // comandos para a conexão com a base de dados require("conectar.php"); // Recupera os dados informados pelo usuário no formulário $data_venc=$_REQUEST["data_venc"]; /*///////////////////////////////////////////// /// FUNCAO PARA CONVERTER DATA PARA O MYSQL /// /////////////////////////////////////////////*/ function converter_data($dat){ // Recebemos a data no formato: dd/mm/aaaa // Convertemos a data para o formato: aaaa-mm-dd $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; return $y.'-'.$m.'-'.$d; } /*////////////////////////////// /// FUNCAO PARA VALIDAR DATA /// //////////////////////////////*/ function ValidaData($dat){ $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; // verifica se a data é válida! // 1 = true (válida) // 0 = false (inválida) $res = checkdate($m,$d,$y); if ($res == 1){ return 1; } else { return 0; } } if (ValidaData($data_venc)) // Verifica se é uma data válida, { $venc = converter_data($data_venc); // Converte a data BR para o formato MySQL $sql="insert into PRODUTOS values (NULL, '$venc')"; $comando=mysql_query ($sql); if (!$comando) {echo "Erro!<br><br>O Produto <b>NÃO</b> foi Incluído";} else {echo "Ok!<br><br>O Produto foi Incluídocom sucesso";} } else { echo "Data de Vencimento Inválida<br> Por favor informe uma data correta!";} mysql_close($conexao); ?> Para mostrar uma data do formato MySQL no php, basta usar a função de converter_data no sentido inverso ;) Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
LEO8789 0 Denunciar post Postado Junho 24, 2009 Eu também estava atrás disso, achei várias alternativas (algumas para diferentes versões de php), e acabei adaptando 1 de uma maneira que talvez não seja a mais prática, ou mais didática, mas foi a que eu achei mais fácil de entender Primeiro. Tem o campo input. Eu usei uma função que peguei na net para máscara de CPF e adaptei para campos data. Não lembro o site que peguei, por isso não vou colocar os créditos, mas o campo input fica assim: <input name='data_venc' type='text' id='data_venc' onkeypress='mascara(this,tipodata)' size='10' maxlength='10'>coloquei maxlenght = 10 para que o usuário não digite mais que 10 "digitos". Nesse caso, ele não precisará digitar as '/' pois a máscara coloca automaticamente. Como a dúvida não é sobre a máscara, não vou explicar a função em JavaScript. Basta colocar o trecho de código abaixo na área <head> de seu documento. <script> function mascara(o,f){ v_obj=o v_fun=f setTimeout("execmascara()",1) } function execmascara(){ v_obj.value=v_fun(v_obj.value) } function leech(v){ v=v.replace(/o/gi,"0") v=v.replace(/i/gi,"1") v=v.replace(/z/gi,"2") v=v.replace(/e/gi,"3") v=v.replace(/a/gi,"4") v=v.replace(/s/gi,"5") v=v.replace(/t/gi,"7") return v } function tipodata(v){ v=v.replace(/\D/g,"") //Remove tudo o que não é dígito v=v.replace(/(\d{2})(\d)/,"$1/$2") //Coloca uma barra entre o segundo e o terceiro dígito v=v.replace(/(\d{2})(\d)/,"$1/$2") //Coloca uma barra entre o quarto e o quinto dígito return v } </script> Bom, com a data informada corretamente, vamos à parte da gravação na base de dados. Como você já falou, um campo criado no MYSQL como tipo DATE, é armazenado na base de dados sempre no formato YYYY-MM-DD. Então precisamos transformar essa data informada ANTES de gravar. Bom. Eu trabalho com um arquivo para o formulário, e na definição do formulário, eu informo o nome do arquivo que irá gravar efetivamente os dados, e fazer uma validação dos dados antes de gravá-los. Ex.: <form action=grava.php>. É nesse arquivo grava.php, que iremos transformar a data informada pelo usuário. Para isso utilizaremos a função abaixo, que simplesmente "fatia" a data informada pelo usuário, usando como referência o caracter '/'. A máscara acima é util, pois em alguns casos, alguns usuários poderiam informar a data usando outros delimitadores, como 17-10-1972 ou 18.09.1981, e nesse caso a conversão não funcionaria. Então é melhor garantir do que remediar :) Após fatiar, temos um array com as 3 informações necessárias (dia, mês e ano). Para um melhor entendimento, criei uma variável para cada uma delas. Em seguida, essas variáveis são concatenadas novamente, usando o caracter '-' como separador e na ordem que o MySQL necessita. /*///////////////////////////////////////////// /// FUNCAO PARA CONVERTER DATA PARA O MYSQL /// /////////////////////////////////////////////*/ function converter_data($dat){ // Recebemos a data no formato: dd/mm/aaaa // Convertemos a data para o formato: aaaa-mm-dd $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; return $y.'-'.$m.'-'.$d; } Antes de gravar o campo na base de dados, basta chamar essa função, passando a data que o usuário informou como parâmetro: $venc = converter_data($data_venc); // Converte a data BR para o formato MySQL Nesse caso, a variável $venc já está transformada para o formato exigido pelo MySQL. Mas o script ainda pode não funcionar direito, pois o usuário ainda pode digitar alguma coisa que não seja uma data válida no campo input, como por exemplo 66-58-1987. Nesse caso, seria indicado fazer uma Verificação se essa informação é uma data válida. Para isso, tem outra funçãozinha básica, também em PhP. Basta usar a função checkdate() do php, mas para isso temos que fatiar a string novamente. /*////////////////////////////// /// FUNCAO PARA VALIDAR DATA /// //////////////////////////////*/ function ValidaData($dat){ $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; // verifica se a data é válida! // 1 = true (válida) // 0 = false (inválida) $res = checkdate($m,$d,$y); if ($res == 1){ return 1; } else { return 0; } } O resultado final ficaria mais ou menos assim: <?php // comandos para a conexão com a base de dados require("conectar.php"); // Recupera os dados informados pelo usuário no formulário $data_venc=$_REQUEST["data_venc"]; /*///////////////////////////////////////////// /// FUNCAO PARA CONVERTER DATA PARA O MYSQL /// /////////////////////////////////////////////*/ function converter_data($dat){ // Recebemos a data no formato: dd/mm/aaaa // Convertemos a data para o formato: aaaa-mm-dd $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; return $y.'-'.$m.'-'.$d; } /*////////////////////////////// /// FUNCAO PARA VALIDAR DATA /// //////////////////////////////*/ function ValidaData($dat){ $data = explode("/","$dat"); // fatia a string $dat em pedados, usando / como referência $d = $data[0]; $m = $data[1]; $y = $data[2]; // verifica se a data é válida! // 1 = true (válida) // 0 = false (inválida) $res = checkdate($m,$d,$y); if ($res == 1){ return 1; } else { return 0; } } if (ValidaData($data_venc)) // Verifica se é uma data válida, { $venc = converter_data($data_venc); // Converte a data BR para o formato MySQL $sql="insert into PRODUTOS values (NULL, '$venc')"; $comando=mysql_query ($sql); if (!$comando) {echo "Erro!<br><br>O Produto <b>NÃO</b> foi Incluído";} else {echo "Ok!<br><br>O Produto foi Incluídocom sucesso";} } else { echo "Data de Vencimento Inválida<br> Por favor informe uma data correta!";} mysql_close($conexao); ?> Para mostrar uma data do formato MySQL no php, basta usar a função de converter_data no sentido inverso ;) Espero ter ajudado. Vlw cara!!! Ajudou com o código de conversão e ainda com a validação da data! Muito bom, excelente resposta!!! RESOLVIDO! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Junho 24, 2009 Como eu disse, para o MySQL já há função nativa. É mais fácil, rápido e claro. Mas faça o que achar mais conveniente... http://dev.mysql.com/doc/refman/5.1/en/dat...ion_str-to-date Compartilhar este post Link para o post Compartilhar em outros sites