Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Bobrinha

Erro na exibição da data sempre retorna 31/12/1969

Recommended Posts

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'])); ?>"/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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');

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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)); ?>"/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

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...

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.