PHPit - PHP

"Agora, pois, permanecem a fé, a esperança, o amor, estes três; mas o maior destes é o amor." (I Coríntios 13:13)

Descobrindo a idade através da data de nascimento

Prefácio


De volta à ativa, próximo ao primeiro aniversário do PHPit, continuo com aquela proposta de artigos com pequenas dicas.
Hoje falaremos sobre um assunto que já foi levantado em diversos fóruns web adentro.

Conceito


Algumas vezes você pode necessitar descobrir a idade exata do seu usuário. As vezes ele acaba sendo barrado, apesar de ter a idade correta, mas pelo fato de ele ter completado a idade necessária no ano corrente, acabamos por restringir um usuário que deveria ter acesso.

A idéia básica nesse script é encontrar a timestamp de hoje, a timestamp do nascimento do fulano, subtrair um do outro, dividir pelos 60 segundos, pelos 60 minutos, pelas 24 horas e pelos 365.25 dias do ano. (Ufa!)

Mas aí você me pergunta: "Peraí! 365.25 dias do ano?!".

Lembra-se dos anos bissextos? (Rápida aula de história :P)
Em 238 a.C., lá no Egito, durante a monarquia de Ptolomeu III, foi decretada a adição de 1 dia a cada 4 anos, pra compensar a diferença que existia entre o ano do calendário e o ano solar. Depois aconteceram diversos fatos, que não vêm ao caso agora, e finalmente foi dada origem ao que provavelmente é a maior gambiarra da história: o ano bissexto. Por isso cada ano teria aproximadamente 365.25 (por causa do 1/4 de dia que fica sobrando)...

Bom... Está respondida a pergunta, então..

Mão na massa



Vamos supor que temos apenas a data, no formato brasileiro...

Código: Alternar entre o modo de cópia/destaque
  1. <?php
  2.  
  3. // Declara a data! :P
  4. $data = '29/08/2008';
  5.  
  6. // Separa em dia, mês e ano
  7. list($dia, $mes, $ano) = explode('/', $data);
  8.  
  9. // Descobre que dia é hoje e retorna a unix timestamp
  10. $hoje = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
  11. // Descobre a unix timestamp da data de nascimento do fulano
  12. $nascimento = mktime( 0, 0, 0, $mes, $dia, $ano);
  13.  
  14. // Depois apenas fazemos o cálculo já citado :)
  15. $idade = floor((((($hoje - $nascimento) / 60) / 60) / 24) / 365.25);
  16.  
  17. print $idade;
  18.  
  19. ?>
<?php

    
// Declara a data! :P
    
$data '29/08/2008';
   
    
// Separa em dia, mês e ano
    
list($dia$mes$ano) = explode('/'$data);
   
    
// Descobre que dia é hoje e retorna a unix timestamp
    
$hoje mktime(000date('m'), date('d'), date('Y'));
    
// Descobre a unix timestamp da data de nascimento do fulano
    
$nascimento mktime000$mes$dia$ano);
   
    
// Depois apenas fazemos o cálculo já citado :)
    
$idade floor((((($hoje $nascimento) / 60) / 60) / 24) / 365.25);

    print 
$idade;

?>


Conclusão


Há outros métodos de se fazer isso, mas esse é um dos mais simples, pois utiliza apenas cálculos e não vários IFs.

Espero que tenham gostado! :)

E preparem-se para novidades no primeiro aniversário do PHPit!

Abraços!

Dim dim

 

Comentaí! (03)

muito boa a dica amigo...

a proposito, dia 29/08 que vc usou no exemplo é meu nascimento

abracos vitor hugo em 09/07/2009 às 17:07 utilizando o Mozilla Firefox Mozilla Firefox 3.0.11 no Windows Windows XP
Muito bom. Só faltou encapsular numa função adicionando alguns recursos a mais, como identificação do formato (brasileiro, americano ou banco de dados) e separador (ponto, traço, barra...) Bruno em 02/09/2009 às 11:15 utilizando o Mozilla Firefox Mozilla Firefox 3.5.2 no Windows Windows XP
Adorei muito este artigo, ajudou muito.... Diones em 01/10/2009 às 06:17 utilizando o Mozilla Firefox Mozilla Firefox 3.5.3 no Windows Windows XP
 

Comenta logo, pô!

* Todos os links inseridos nos comentários possuem rel="nofollow" para impedir com que crawlers considerem os mesmos como relevantes.
* Os e-mails não são divulgados.

Dados pessoais

Você é realmente um humano?

Finalmente, digite seu comentário :)

Caixinha de Sugestões

O que é isso? Aqui você pode simplesmente digitar uma sugestão (artigos, resenhas, melhorias, etc) sem precisar preencher longos formulários. Digite o que quiser na caixinha abaixo e eu lerei com o maior prazer! Se quiser se identificar, fique a vontade!

O PHPit é redigido e mantido por Rafael Jaques - Política de Privacidade.

XHTML/CSS desenvolvido por André Gazola.

PHPit 2007 - 2009 - Alguns direitos reservados.

Feeds ;)

Creative Commons License

PHPit por Rafael Jaques é licensiado sob a Creative Commons Atribuição-Uso Não-Comercial-Compartilhamento pela mesma Licença 2.5 Brasil License.