7
respostas

Como calcular a idade no PHP

Olá criei um campo data em formulário. Gostaria de saber como calcular a idade do usuário? Obrigado.

7 respostas

Adriano, tente essa função:

<?php function calc_idade($data_nasc) { $data_nasc=explode('/',$data_nasc); //Cria um array com os campos da data de nascimento $data=date('d/m/Y'); $data=explode('/',$data); //Cria um array com os campos da data atual $anos=$data[2]-$data_nasc[2]; //ano atual - ano de nascimento if($data_nasc[1] > $data[1]) return $anos-1; //Se o mês de nascimento for maior que o mês atual, diminui um ano if($data_nasc[1] == $data[1]){ //se o mês de nascimento for igual ao mês atual, precisamos ver os dias if($data_nasc[0] <= $data[0]) { return $anos; } else{ return $anos-1; } }

return $anos; } ?>

Coloquei o resultado em uma coluna de uma tabela e retornou 0000-00-00 Então eu inseri um novo usuário com o formato yyyy/mm/dd E retornou uma data errada : 2000-01-23

Acho que o erro está na hora de inserir na tabela com o seguinte código:

<?php 

        $usuarios = listaUsuarios($conexao);

        foreach($usuarios as $usuario) :


    ?>
    <tr>

        <td><?= $usuario['id'] ?></td>
        <td><?= $usuario['nome'] ?></td>
        <td><?= $usuario['email'] ?></td>
        <td><?= calc_idade('nascimento') ?></td>
        <td><?= $usuario['telefone'] ?></td>

        <td><a class="btn btn-primary" href="edit.php?id=<?=$usuario['id']?>">alterar</a></td>
        <td>
            <form action="remove-usuario.php" method="post">
                <input type="hidden" name="id" value="<?=$usuario['id']?>" />
                <button class="btn btn-danger">remover</button>
            </form>
        </td>
    </tr>
    <?php
        endforeach;

Acho que estou chamando a função calc_idade de maneira errada....


function calc_idade($nascimento) {
            $nascimento=explode('/',$nascimento); //Cria um array com os campos da data de nascimento 
            $data=date('d/m/Y'); $data=explode('/',$data); //Cria um array com os campos da data atual 
            $anos=$data[2]-$nascimento[2]; //ano atual - ano de nascimento 
            if($nascimento[1] > $data[1]) return $anos-1; //Se o mês de nascimento for maior que o mês atual, diminui um ano 
            if($nascimento[1] == $data[1]){ //se o mês de nascimento for igual ao mês atual, precisamos ver os dias 
              if($nascimento[0] <= $data[0]) { return $anos; } else{ return $anos-1; } }

          return $anos; }

O nome do campo data que eu inseri no banco de dados é nascimento.

Achei uma função que funciona, porém a variável $datadonascimento está estática. Eu queria pegar o valor do banco de dados. O nome do campo é nascimento.

     $datadonascimento = '20/11/1977';

    // Separa em dia, mês e ano
    list($dia, $mes, $ano) = explode('/', $datadonascimento);

    // 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
    $diadonascimento = mktime( 0, 0, 0, $mes, $dia, $ano);

    // Depois apenas fazemos o cálculo já citado :)
    $idade = floor((((($hoje - $diadonascimento) / 60) / 60) / 24) / 365.25);

O jeito que você passa o parâmetro para a função esta errado, o correto é:

<td><?= calc_idade($usuario['nascimento']) ?></td>

Já tinha tentado desse jeito. Mas dá um erro de index of array. Como se não existisse esse campo no array $usuario. Mas o que eu queria mesmo saber é como mudar a data estática para o campo nascimento, pois daquele jeito funciona.

Se eu tento o seguinte código , dá seguinte erro: Notice: Undefined offset: 1 in C:\xampp\htdocs\processo-seletivo\usuario-lista.php on line 84

Notice: Undefined offset: 2 in C:\xampp\htdocs\processo-seletivo\usuario-lista.php on line 84

Onde a linha 84 é

list($dia, $mes, $ano) = explode('/', $datadonascimento);
 <?php 

        // Declara a data! :P
 $usuarios = listaUsuarios($conexao);





        foreach($usuarios as $usuario) :


    ?>
    <tr>

        <td><?= $usuario['id'] ?></td>
        <td><?= $usuario['nome'] ?></td>
        <td><?= $usuario['email'] ?></td>
        <?php
         $datadonascimento = (int) $usuario['nascimento'];

    // Separa em dia, mês e ano
    list($dia, $mes, $ano) = explode('/', $datadonascimento);

    // 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
    $diadonascimento = mktime( 0, 0, 0, $mes, $dia, $ano);

    // Depois apenas fazemos o cálculo já citado :)
    $idade = floor((((($hoje - $diadonascimento) / 60) / 60) / 24) / 365.25);
    ?>
        <td><?= $idade ?></td>
        <td><?= $usuario['telefone'] ?></td>