Olá criei um campo data em formulário. Gostaria de saber como calcular a idade do usuário? Obrigado.
Olá criei um campo data em formulário. Gostaria de saber como calcular a idade do usuário? Obrigado.
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>