Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá!
Preciso de uma ajuda, por favor... tenho um campo do tipo Date no banco, mas preciso que no formulário o usuário digite no formato que usamos no Brasil.
Para converter, estou fazendo o insert, com o auxilio do seguinte código:
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
Só que ele está bagunçando um pouco a data na hora de inserir no banco.
Por exemplo:
1 - se digito 28/02/2017 (yyyy) ele grava no banco 0000-00-00
2- se digito 28/02/17 (yy) ele grava no banco 2028-02-17 (fica meio assim yydd/mm/yy)
Como posso corrigir isso?Eu utilizo esta configuração sem problema, seta o campo como date e defini 0000-00-00 , não bagunça e fica certinho.
Porém faça como nosso amigo falou, da um echo e verifique.
$dataCrua = "2017-02-21";
$dataFormatada = date('d/m/Y', strtotime($dataCrua));
echo $dataFormatada;
Ta ai um exemplo de como tratar data vinda em outros formatos.
Lembrando que no BD em campo DATE você precisa salvar no formato "universal" YYYY-MM-DD
Sempre salve em YYYY-MM-DD e na impressão você faz a tratativa como te mostrei acima>
Em 21/02/2017 at 12:47, Guilherme Luiz disse:
$dataCrua = "2017-02-21";
$dataFormatada = date('d/m/Y', strtotime($dataCrua));
echo $dataFormatada;
Ta ai um exemplo de como tratar data vinda em outros formatos.
Lembrando que no BD em campo DATE você precisa salvar no formato "universal" YYYY-MM-DD
Sempre salve em YYYY-MM-DD e na impressão você faz a tratativa como te mostrei acima
Obrigada pela resposta, mas não entendi muito bem o que voce postou.
Eu sei que o formato do campo Date é YYYY-MM-DD, e é exatamente este o problema. Preciso tratar o campos para o envio, antes de tratar para a impressão.>
Em 21/02/2017 at 11:01, gersonab disse:
Eu utilizo esta configuração sem problema, seta o campo como date e defini 0000-00-00 , não bagunça e fica certinho.
Porém faça como nosso amigo falou, da um echo e verifique.
O campos já está setado como date, mas não entendi a parte que você disse "defini 0000-00-00". Onde eu defino assim?
>
Em 21/02/2017 at 10:30, ESerra disse:
Dá um echo na variável $data_operacao2 antes de inserir no BD para ver o valor real da variável após a alteração.
Dei um echo após a alteração, e apareceu errado como no exemplo que citei. O que devo fazer?
>
7 minutos atrás, CamilaDePaula disse:
O campos já está setado como date, mas não entendi a parte que você disse "defini 0000-00-00". Onde eu defino assim?
Dei um echo após a alteração, e apareceu errado como no exemplo que citei. O que devo fazer?
$data_operacao2 = '21/10/1984';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2; //Resultado 1984-10-21
Logo o problema está no formato da sua data e não na conversão.>
6 minutos atrás, ESerra disse:
$data_operacao2 = '21/10/1984';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2; //Resultado 1984-10-21
Logo o problema está no formato da sua data e não na conversão.
Como posso arrumar?>
Agora, CamilaDePaula disse:
Como posso arrumar?
Informe a data no formato correto... a data de entrada deverá ser dd/mm/aaaa. Se for outro formato a conversão não vai funcionar como esperado.
>
Agora, ESerra disse:
Informe a data no formato correto... a data de entrada deverá ser dd/mm/aaaa. Se for outro formato a conversão não vai funcionar como esperado.
Mas estou informando a data no formato correto. Como eu disse, acontece seguinte:
1 - se digito 28/02/2017 (yyyy) ele grava no banco 0000-00-00 (assim com zero mesmo, sem a data)
2- se digito 28/02/17 (yy, no caso o ano só com duas casas) ele grava no banco 2028-02-17 (fica meio assim yydd/mm/yy)
Vamos tenta um novo aproach, pensar:
Me responde, porque motivo o BD está gravando 0000-00-00?
>
4 minutos atrás, ESerra disse:
Vamos tenta um novo aproach, pensar:
Me responde, porque motivo o BD está gravando 0000-00-00?
Talvez porque esteja pegando um formato inválido, ou talvez seja algum erro no INSERT, mas não sei...
Esse é o primeiro problema "talvez"... talvez é a mãe de todos os erros, você tem que entender o que está fazendo para só assim corrigir o problema.
Está sendo inserido 0000-00-00 porque o formato da data está fora do padrão que o campo exige.
Então, ANTES do insert, dê um echo na variável e veja o que de fato está sendo passado para o insert, esse será o ponto de partida.
>
26 minutos atrás, ESerra disse:
Esse é o primeiro problema "talvez"... talvez é a mãe de todos os erros, você tem que entender o que está fazendo para só assim corrigir o problema.
Está sendo inserido 0000-00-00 porque o formato da data está fora do padrão que o campo exige.
Então, ANTES do insert, dê um echo na variável e veja o que de fato está sendo passado para o insert, esse será o ponto de partida.
Fiz assim:
$data_operacao2 = '02/03/2017';
$data_operacao2 = implode("-", array_reverse(explode("/", $data_operacao2)));
echo $data_operacao2;
E retornou assim: 2017-03-02Posta o script inteiro.
>
5 minutos atrás, ESerra disse:
Posta o script inteiro.
Já achei o que era... era um erro BESTA no input, que estava como "text", mudei para "date" e funcionou. Obrigada à todos! =)
Mas tenho outra dúvida no mesmo assunto:
Tenho uma página de edição que retorna os dados gravados de acordo com o ID, que agora está retornando a data no formato em que ela foi gravada " 2017-03-02 ".
Como faço para mostrar na tela no formato pt_br e fazer o update no formato do banco novamente?
http://php.net/manual/pt_BR/function.strtotime.php
Bons estudos.
>
16 minutos atrás, CamilaDePaula disse:
Já achei o que era... era um erro BESTA no input, que estava como "text", mudei para "date" e funcionou. Obrigada à todos! =)
Funcionou "na sorte", pois o simples fato de usar um input text não justifica o erro em si.
Dá um echo na variável $data_operacao2 antes de inserir no BD para ver o valor real da variável após a alteração.