Calculando a idade com PHP

Neste artigo, vamos ver alguns exemplos de como você pode obter a idade com PHP de acordo com a data de nascimento informada.

No primeiro exemplo, vamos criar uma função para receber uma data no formato dd/mm/aaaa e retornar a diferença em anos comparando com a data atual.

function calcularIdade($data){

$idade = 0;

$data_nascimento = date('Y-m-d', strtotime($data));

    $data = explode("-",$data_nascimento);

    $anoNasc    = $data[0];

    $mesNasc    = $data[1];

    $diaNasc    = $data[2];

 

    $anoAtual   = date("Y");

    $mesAtual   = date("m");

    $diaAtual   = date("d");

 

    $idade      = $anoAtual - $anoNasc;

    if ($mesAtual < $mesNasc){

        $idade -= 1;

    } elseif ( ($mesAtual == $mesNasc) && ($diaAtual <= $diaNasc) ){

        $idade -= 1;

    }

 

    return $idade;

}

echo (calcularIdade("01/04/1970"));

 

Para calcular a data, foi feita a conversão do formato dd/mm/aaaa para aaaa-mm-dd, utilizamos para isso a função "date". Através da função "explode", convertemos o resultado em um array, onde o separador informado foi o "-", ou seja, cada pedaço da data foi armazenado em uma posição do array. Da mesma forma que foram criadas variáveis para guardar os dados da data de nascimento, foram criadas variáveis para guardar os dados da data atual, utilização a função date("Y"), date("m") e  date("d") retornando o ano, mes e dia atuais.

A forma mais simples de calcular a idade seria subtrair o ano atual do ano da data de nascimento. Porém, precisamos ficar atento ao mes e ao dia, para isso, utilizamos os "ifs" para ajustar o resultado, de outra forma, a idade retornada poderia ser 1 ano maior do que a real.

Essa mesma função poderia ser simplificada da seguinte forma:

 

function calcularIdade($data){

$idade = 0;

$data_nascimento = date('Y-m-d', strtotime($data));

list($anoNasc, $mesNasc, $diaNasc) = explode('-', $data_nascimento);

 

    $idade      = date("Y") - $anoNasc;

    if (date("m") < $mesNasc){

        $idade -= 1;

    } elseif ((date("m") == $mesNasc) && (date("d") <= $diaNasc) ){

        $idade -= 1;

    }

 

    return $idade;

}

echo (calcularIdade("01/04/1970"));

 

Utilizando a função "list", quebramos o array criado pela função "explode" em variaveis, o conteúdo das variáveis "$anoNasc", "$mesNasc" e "$diaNasc" seguiria a mesma posição do array (0, 1 e 2). As variáveis referentes a data atual não foram criadas.

 

Vamos ver uma forma diferente de calcular a data, desta vez a data de nascimento já vai estar no formato americano (aaaa-mm-dd).

 

$data = "1970-04-01";

list($ano, $mes, $dia) = explode('-', $data);

$hoje = mktime(0, 0, 0, date('m'), date('d'), date('Y'));

$nascimento = mktime( 0, 0, 0, $mes, $dia, $ano);

$idade = floor((((($hoje - $nascimento) / 60) / 60) / 24) / 365.25);

echo $idade;

 

A função "mktime" permite criar um timestamp Unix de uma data. Seus argumentos são mktime(hora, minuto, segundo, mês, dia,ano);

Como o retorno vai ser um número com os segundos deste 01 de janeiro de 1970, vamos precisar converter a diferença entre as duas datas em anos, por isso se fez as diviões por 60 (segundos), 60(minutos), 24(horas) e 365.25 (dias do ano). A função "floor" faz o arredondamento do resultado para baixo, o seu retorno é um número inteiro.

Como o melhor sempre fica para o final, você pode resolver este problema sem a necessidade de construir uma função própria, o PHP possui um objeto "Datetime" que permite resolver isso com poucas linhas de código

 

$dataNascimento = '1970-04-01';

$data = new DateTime($dataNascimento );

$resultado = $data->diff( new DateTime( date('Y-m-d') ) );

echo $resultado->format( '%Y anos' );

 

No exemplo acima foi criado um objeto DateTime com base na data de nascimento informada, e utilizando o método "diff", se calculou a diferença em relação a data atual. O resultado foi exibido no formato de anos, utilizando o método "format".

A validação de idade é algo que você pode fazer diretamente no seu frontend. Veja no artigo abaixo um exemplo de como fazer esta validação com o JavaScript

Calculado a Idade com JavaScript

Para validar informações já existentes, você pode validar direto no banco de dados. No link a seguir tem um exemplo de como fazer isso com um banco de dados relacional, que é o SQL Server, mas as dicas podem ser aplicadas em outros bancos que utilizam SQL.

Calculado a Idade usando SQL Server

Veja outros conteúdos que podem ser de seu interesse