Ir para conteúdo

POWERED BY:

Arquivado

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

marcelfelipe

calcular datas

Recommended Posts

ola amigos,

 

sou estudante de php e gostaria de uma ajuda.

 

estou fazendo um trabalho do curso e recebo do usuario uma data no formato dd/mm/aaaa.

 

criei uma pagina php que recebe a data , faz os calculos e manda pro banco de dados.

 

$data=$_POST['data']; // recebe do usuario

 

$data=strtotime('+30 day', $data); calcula a data daqui a 30 dias

 

$data=date('Y/m/d', $data); // converto no formato aaaa/mm/dd para guardar essa data calculada no banco

 

mysql_query("insert into ------(data_daqui_30dias) values('$data'); // para salvar no banco

 

so que nao esta salvando como eu queria , o resultado do calculo e conversao da data $data ta dando 592597800 ou seja nao esta convertendo no formato que eu preciso aaaa/mm/dd.

 

alguem tem alguma dica? obrigado..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece é que o strtotime(); precisa de um timestamp para calcular a data e você está querendo jogar a data no formato dd/mm/YY nele, por isso não funciona.

 

Pra calcular a data você tem primeiro que transformar a data enviada pelo usuário num timestamp. Poderia usar o mktime(); mas é mais simples usando o próprio strtotime(); pra isso, dessa forma:

date('Y/m/d', strtotime("+30 days",strtotime(str_replace("/", "-", $_POST["data"]))));

Repare que o strtotime(); só vai calcular o timestamp corretamente também caso a data seja enviada no formato dd-mm-YY, por isso o str_replace(); trocando as barras por traços.

 

Além disso, troque o seu '+30 day' por '+30 days'. São 30 diaS, e se escrever 30 dia o php não terá um cérebro humano com interpretação de texto para entender rs.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só pra esclarecer um pouco mais as coisas:

str_replace("/", "-", $_POST["data"]) -> troca as barras por traços, na data enviada

strtotime(str_replace("/", "-", $_POST["data"])) -> transforma a data num timestamp

strtotime("+30 days",strtotime(str_replace("/", "-", $_POST["data"]))) -> adiciona 30 dias a timestamp

 

Parando um pouco neste ponto, veja bem: timestamp é a o número de segundos desde a éra Unix (January 1 1970 00:00:00 GMT). Então, todas as horas são, na verdade, medidas em segundos, seguidas de suas grandezas. 60 segundos = 1 minuto. 60 minutos = 1 hora. 24 horas = 1 dia. 30 dias = 1 mês. 12 meses = 1 ano. Logo, temos o esquema abaixo, seguindo o padrão segundos * minutos * horas * dias * meses * anos:

 

60 * 60 * 24 * 30 * 12 = 1 ano;

60 * 60 * 24 * 30 * 12 * 2 = 2 anos;

60 * 60 * 24 * 30 * 12 * 3 = 3 anos;

60 * 60 * 24 * 30 * 12 * 15 = 15 anos;

E assim por diante.

 

Logo, isso:

strtotime("+30 days",strtotime(str_replace("/", "-", "14/05/1994")));

é exatamente igual a isso:

strtotime(str_replace("/", "-", "14/05/1994")) + 60 * 60 * 24 * 30;

e também é exatamente igual a isso:

mktime(0,0,0,14,5,1994) + 60 * 60 * 24 * 30;

 

Aí vai da sua criatividade e necessidade xD

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.