segunda-feira, 25 de junho de 2012

Descobrindo a idade através da data de nascimento em PHP



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…

<?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(0, 0, 0, date('m'), date('d'), date('Y'));
    // Descobre a unix timestamp da data de nascimento do fulano
    $nascimento = mktime( 0, 0, 0, $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! :)

Nenhum comentário:

Postar um comentário