Ir para conteúdo

POWERED BY:

Arquivado

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

antonrangel

[ERRO] Função 'date()'

Recommended Posts

Fala galerinha.. Bom to com um problema no meu código em relação a função date().

Este é o código que funciona perfeitamente:

$data = date('d-m-Y',strtotime('17-02-2013'));
echo 'dia '.date('d',strtotime($data));
echo '<br />mês '.date('m',strtotime($data));
echo '<br />ano '.date('Y',strtotime($data));
dia 17
mês 12
ano 2013

Porém, se ao invez de usar "- " (traço) eu colocar "/" (barra) o código continua correto, mas exibe algo totalmente contrário ao que foi pedido:

$data = date('d/m/Y',strtotime('21/10/1995'));
echo 'dia '.date('d',strtotime($data));
echo '<br />mês '.date('m',strtotime($data));
echo '<br />ano '.date('Y',strtotime($data));
dia 31
mês 12
ano 1969

Gostaria de saber porque isto acontece, e se existe alguma solução.

 

To esperando ansiosamente pra eu continuar meu estudo de PHP, hehehe.

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre que você cria o time de uma data inválida ele vai te retornar 31-12-1969, o motivo de ser usada inválida está no próprio manual:

Note:
Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

 

http://php.net/strtotime

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sempre que você cria o time de uma data inválida ele vai te retornar 31-12-1969, o motivo de ser usada inválida está no próprio manual:

 

Note:

Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.

To avoid potential ambiguity, it's best to use ISO 8601 (YYYY-MM-DD) dates or DateTime::createFromFormat() when possible.

 

http://php.net/strtotime

Então no caso, se o cliente digitar -> 17/02/2013, eu teria que trocar as barras por traços e a partir dai verificar a data?

$data = date('d/m/Y',strtotime('21/10/1995'));

Ou, por exemplo, se eu trocar na parte d/m/Y por d-m-y OU 21/10/1995 por 21-10-1995 também não dara certo?

Só pergunto isso, pois consegui retornar um valor correto ao colocar ambas as partes com traços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desenhando a explicação do manual:

ANO-MÊS-DIA = Válido

DIA-MÊS-ANO = Válido

DIA.MÊS.ANO = Válido

MÊS/DIA/ANO = Válido

DIA/MÊS/ANO = Inválido

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.