Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá, estou com um problema estranho e não sei como resolver, agradeço qualquer ajuda, bom meu script esta rodando certinho pego os dados do formulario e jogo no banco, pelo var dump me mostra tudo correto, no banco também, mais na exibição pelo echo no campo fica sempre com a data 31/12/1969, volta ao normal somente se você atualizar a pagina manualmente sem reenviar o formulario
Joga certinho no banco no formato date como é o campo
'nascimento' => string '1985-02-22' (length=10)
ai ao exibir a mensagem de sucesso ao enviar para o banco no campo input sempre so mostra a mesma data não entendo, só muda se entrar de novo pra editar, ou seja na pagina de edição apos fazer o update na mesma pagina ja deixo os campos preenchidos com o que vem do banco, todos os outros dados vem corretos do banco e são exibidos nos inputs corretamente menos a data
Campo do formulario
<input type = "text" name = "nascimento" value="<?php if (!empty($dados['nascimento'])) echo date("d/m/Y", strtotime($dados['nascimento'])); ?>"/>Me parece ser um erro de retorno na função strtotime, deve estar retornando false ou -1, provavelmente sua data está no formato inválido, veja se por acaso não esta colocando aspas simples no campo data na sua consulta (SELECT), se tiveres, retire e vê se funciona
Amigo, pode parecer ignorância minha para programadores mais experientes, mas no meu ver creio que você não usará esta data para algum tipo de calculo?
Porque não guarda a data já no formato que vai usar? Evitando ter que ta transformando dota vez que vai exibir?
eu particularmente trabalho assim, mas no seu caso, posso concluir:
A função strtotime espera que seja informada uma string contendo um formato de data em inglês US, e tentará interpretá-lo para um timestamp Unix, no caso você esta informando o formato errado segundo manual da função.
Gabriel Heming
Interessante essa função é do php5 bom não conheço essa função direito então não consigo aproveitar ela ao maximo, mais me parece que ela faz muita coisa e o mesmo que a strtotime ou seja converte para um formato valido, mais aqui so consegui fazer com que ela fizesse o mesmo de antes ela exibi a data correta mais quando eu vou fazer o update da erro nessa função dizendo que nao posso chamar ela
<?php if (!empty($dados['nascimento'])):
$data = Datetime::createFromFormat('Y-m-d', $dados['nascimento']);
echo $data->format('d/m/Y');
endif; ?>
Everson da Luz
Como eu disse a data é salva corretamente no banco e no formato valida 0000-00-00 salva certinho, e a função strtotime converte certo e exibe certo mais ai na hora que faço o update ou seja envio o formulario no var_dump conferindo faz tudo certo, envia tudo certo vai para o banco certo, mais ali na mesma pagina no campo a data fica errada somente apos o envio dos dados, se eu atualizar sem reenviar o formulario volta ao normal
icarof
Sempre salvo a data no formato correto do banco que é como deve ser um campo date não pode receber valores diferentes, estou usando a função strtome no campo do formulario na exibição apenas para formatar a exibição pq do banco ela vem no formato 0000-00-00 e ai converto com a função para 00/00/0000 que é nosso formato
Muito confuso com isso...
Sobre a sua data, é exatamente o que o Emerson da Luz disse. Strtotime, quando dá erro, retorna -1 (que é diferente de false). O padrão unix time é a quantidade em segundos desde 1970-01-01.
Ou seja, todas as dates do PHP tem como "ano zero" 1970-01-01. Quando você faz:
date(-1);
é o mesmo que subtrair um dia, ou seja, 1969-12-31.
A chamada que eu realizei funciona para as versões mais recentes do PHP. Entretanto, eu não testei,
posso ter cometido algum erro.
A biblioteca Date/Time lhe oferece uma gama inteira de classes para trabalhar com datas e horas.
Se olhar nos links abaixo, encontrará uma biblioteca desenvolvida em cima da Date\Time para calendários e jornadas de trabalho.
http://forum.imasters.com.br/topic/525533-classe-php/ (aonde tudo começou).
https://bitbucket.org/harbingerproject/date-time (RC 3)
Já está no composer, mas, como não atuo mais como programador PHP, acabei deixando um pouco de lado. Acredito que nas próximas semanas eu esteja retornando o desenvolvimento.
Só recomendei, por que uso datas assim, e em algumas tabelas, separo dia, mes, e ano,pois facilita algumas buscas e cálculos.
Testei seu código aqui, ironicamente funcionou, tenta jogar o valor que retorna do BD na variavel nascimento,e testa pra ver
<?php
$nascimento = '1985-02-22';
?>
<input type = "text" name = "nascimento" value="<?php if (!empty($nascimento)) echo date("d/m/Y", strtotime($nascimento)); ?>"/>Gabriel Heming, estou vendo e testando essa biblioteca em busca de uma solução para esse problema que não entendo e nunca passei por isso
icarof, então como eu disse o código funciona certinho e converte corretamente, mais quando eu mando para o banco e depois que envio exibo a mensagem de sucesso onde veria aparecer a data correta fica sempre 31/12/1969 ai so volta ao normal se eu atualizar a pagina sem reenviar os dados pq se eu reenviar atualiza pra essa data errada, muito estranho isso
Obrigado a todos continuo na luta desse misterio pra mim...
1969-12-31 é a data default de algumas funções PHP. O mais provável que o parse da data esteja sendo realizado de maneira incorreta.
Tente realizar da seguinte forma:
echo DateTime::createFromFormat('Y-m-d' , $dados['nascimento'])->format('d/m/Y');