Descobrindo a idade através da data de nascimento

! Esta publicação foi escrita há mais de dois anos. Dificilmente existirão mudanças significativas, mas tenha isso em mente ao lê-la.

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…

<?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! :)

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

Abraços!

10 respostas para “Descobrindo a idade através da data de nascimento”

  1. vitor hugo disse:

    muito boa a dica amigo…

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

    abracos

  2. Bruno disse:

    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…)

  3. Diones disse:

    Adorei muito este artigo, ajudou muito….

  4. Carolyn disse:

    oIEE sOU a CAROLINNE DE 13 ANOS ISSO QER DIZER QER EU NASCI EM 1997OU 1996 QERO DESCUBRI OBRIGADA

  5. Rafael, eu faço esse cálculo com um único IF e sem a necessidade de tantas operações de divisão. Veja em:
    http://rubsphp.blogspot.com/2011/04/funcao-para-c

  6. Versão alternativa:

    <code>

    /**

    * Calcula a idade a partir de uma data de nascimento e o dia atual

    * @param int $dia Dia de nascimento

    * @param int $mes Mes de nascimento

    * @param int $ano Ano de nascimento

    * @return int Idade calculada

    */

    function calcular_idade($dia, $mes, $ano) {

    $hoje = getdate();

    $idade = $hoje['year'] – $ano;

    if ($hoje['mon'] < $mes || ($hoje['mon'] == $mes && $hoje['mday'] < $dia)) {

    $idade -= 1;

    }

    return $idade;

    }

    </code>

  7. Gabriela disse:

    Excelente post!! Estva precisando de algo simples assim. Parabéns.

  8. Ricardo disse:

    Perfeito! Muito obrigado.

  9. Bruno Campos disse:

    Sensacional o post Rafael! Dentre tantas funções miraculosas da internet, enfim alguém postou uma muito bem pensada como a sua!

Deixe uma resposta