Olá criei um campo data em formulário. Gostaria de saber como calcular a idade do usuário? Obrigado.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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>