Ir ao conteúdo
  • Cadastre-se

PHP: como calcular idade automaticamente ano pós ano?


Posts recomendados

Boa tarde;

Inseri na tabela usuários do banco de dados, a coluna idade e data de cadastro. A idade não é o usuário que informa, é o código que calcula a data atual - a data de nascimento que o usuário informa, ficou assim e calcula perfeitamente:
 

$diasdevida = 365-($mesdenascimento*30-30+$diadenascimento)+365*(date('Y')-$anodenascimento)-365;$idade = ($diasdevida/365);$idade = round($idade);

No entanto, quando fui registrar a data de cadastro do usuário é que pensei se esta função date usada para calcular o $diasdevida não vai atualizar-se ano que vem, para que a idade aumente 1 ano, ou será fixo como o date da data de cadastro.

Sendo assim, como faço para que a date de $diasdevida atualize ano após ano, e a date de $datadocadastro seja fixa para o momento em que foi cadastrado o usuário?
Link para o comentário
Compartilhar em outros sites

  • Moderador

@cesar3m

 

Acredito q nem precise desse cálculo todo... 

Se você registrou no banco de dados a data de nascimento.. é só calcular diretamente com o ano atual e exibir em tela.

Basicamente na tabela você terá o campo date para a data de nascimento e um campo date para data de cadastro... acho q não tem mistério no lance.

 

exemplo:

 

no banco de dados:

ID   nome     dataNascimento    dataCadastro          1    Fulano   1982-07-09        2015-06-17

No seu php você resgata a data de nascimento, extrai o ano e diminui do ano atual.

<?php  include 'conexao.php';  $query = mysqli_query($conexao,"Select dataNascimento FROM tbl_usuario where ID = $id");  $dados = mysqli_fetch_object($query);  //separa a data em 3 partes em um array  $separaData = explode("-", $dados->dataNascimento);    //primeiro índice: 1982   $anoNascimento = $separaData[0];   //ano atual  $anoAtual = date("Y");  $idade = $anoNascimento - $anoAtual;  echo $idade;

Deste jeito, a idade sempre será somada em 1 a cada ano...  porque foi usado o ano  do nascimento e o ano atual.  Mas tem um detalhe..  isso não conta os anos bissextos.  mas é por aí.

Link para o comentário
Compartilhar em outros sites

@dif

Se eu deixo a conta simples, por exemplo: nasci em 1993, e hoje é 2015, então tenho:

2015-1993 = 22

Está certo? Não, porque nasci em novembro de 1993 e hoje tenho 21 anos, então é melhor deixar o cálculo complexo para a idade ficar exata, correto?

Mas minha preocupação é se ano que vem a função date("Y") irá atualizar-se sozinha...
 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@cesar3m

 

Tudo bem, pode deixar complexo. Eu que sou adepto da simplicidade.

E sim. vai se atualizar.  

 

Veja: http://php.net/manual/pt_BR/function.date.php

 

Procure na tabela o Y... vai ver que ele retorna sempre o ano atual em 4 dígitos.

 

Então.. se hj o date("Y") = 2015 ... .  ano que vem o date("Y") = 2016  e assim por diante.

 

No php sempre que o desenvolvedor quiser retornar a data atual, vai usar date("Y-m-d") sendo que o "m" minusculo retorna o mês em formato numérico com zeros, o "d"  minusculo retorna o dia em formato numérico com zeros.

Link para o comentário
Compartilhar em outros sites

@dif

$datadocadastro = date('Y-m-d H:i:s');

A data de cadastro está fixa, verifiquei hoje e a data de cadastro de um usuário de teste continua na mesma data que foi cadastrado! Que bom!

Agora a data na função de idade, espero que mude ano que vem:

$diasdevida = 365-($mesdenascimento*30-30+$diadenascimento)+365*(date('Y')-$anodenascimento)-365;

***** é ter que esperar até lá pra ter certeza kkk

Link para o comentário
Compartilhar em outros sites

  • Moderador

@cesar3m

 

Não se preocupa... vai mudar.

 

Faça o teste no seu localhost.

 

crie um arquivo php assim:

<?php echo date("Y");

salve-o... e rode em localhost..

Depois altere a data no seu calendário do windows... para 2016  e rode novamente o arquivo php em localhost.. verá que ele vai mostrar o novo ano.

 

Você precisa entender que:

 

se fizer assim:

// vai mostrar 2015  - dinâmico é resgatado o ano atualecho date("Y"); //vai mostrar 2016  - é fixo.. é resgatado o valor que você colocouecho date("2016"); 
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...