Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Murilo David

Calculo de Idade em PHP

Recommended Posts

Olá pessoal, sou iniciante no forum e em PHP... Gostaria que me ajudassem a solucionar um desafio.
Preciso criar uma programação no qual o usuário vai inserir o seua data de nascimento em 3 campos e vai dar um Enviar... No caso ele enviaria com o GET para outra pagina e nesse página daria o calculo da idade da pessoa, em
Anos, Dias, Meses, Horas e Minutos..

 

Consigui fazer a página no qual o usuário iria inserir o a data de nascimento e o botão enviar com a programação GET!!

 

<html>
<head>
<title> Calculo de idade! </title>
</head>
<body>
<form action="Ex2.php"  method ="get">
Insira sua data de nascimento: <input type="text" name="num1" size=2> /  
<input type="text" name="num2" size=2>/ 
<input name="ano" type="text" size=4 >
<br> 
<input type="submit" name="sub" value="Calcular!"> 
</form> 
<p>Com este arquivo você pode calcular seu tempo de vida em: (<FONT COLOR="red"> Anos, Dias, Meses, Horas e Minutos</FONT>)</p>
</body>
</html>

 

Ai veio a duvida como ficaria a pagina "ex2.php"? alguém pode me ajudar pelo menos com as formulas.. Obrigado!!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é necessário 3 campos colega, faça apenas um para que o usuário insira sua data normal: 00/00/0000

 

na página que recebe os dados você terá que fazer uma função para retornar a idade.

 

Vou te dar essa colher de chá, mais terá que estudar para entender o que se passa, pois vejo que não tem noção de PHP.

 

 

 

 

<?php
function calc_idade($data_nasc) {

$data_nasc=explode('/',$data_nasc);

$data=date('d/m/Y');

$data=explode('/',$data);

$anos=$data[2]-$data_nasc[2];

if($data_nasc[1] > $data[1])

return $anos-1;

if($data_nasc[1] == $data[1])
if($data_nasc[0] <= $data[0]) {
return $anos;
break;
}
else{
return $anos-1;
break;
}

if ($data_nasc[1] < $data[1])
return $anos;
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites
Tente assim
<?php

$date = new DateTime( '1901-10-11' ); // data de nascimento
$interval = $date->diff( new DateTime( '2011-12-14' ) ); // data definida

echo $interval->format( '%Y Anos, %m Meses e %d Dias' ); // 110 Anos, 2 Meses e 2 Dias

?>

 

 

Com as horas, minutos e segundos
<?php

$date = new DateTime( '1901-10-11 16:08:00' ); // data e hora de nascimento
$interval = $date->diff( new DateTime( ) ); // data e hora atual

echo $interval->format( '%Y Anos, %m Meses, %d Dias, %H Horas, %i Minutos e %s Segundos' );

?>

 

 

:closedeyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

 

date_default_timezone_set('America/Sao_Paulo');

$hoje = getdate();

$nasc = strtotime(19870625);

$nasc1 = getdate($nasc);

 

if ($hoje[mon] > $nasc1[mon]) {

echo ($hoje[year] - $nasc1[year]);

}

else

{

echo ($hoje[year] - $nasc1[year] - 1);

}

 

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal vocês me ajduaram muito.. O Rogério Santana passou um curso para iniciantes que me deu muitas dicas.. Mas o que realmente resolveu meu problema para aula foi o Carlos Coelho ele passou uma programação simples e exata..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia.

 

Estou "reabrindo" o tópico porque o código funcionou perfeitamente em meu PHP, todavia, a data não será definida manualmente, mas puxada de um banco de dados. Eu queria que houvesse um coparativo entre a data gravada e a data de hoje, de modo a demonstrar a idade exata (X anos, Y meses e Z dias), conforme há no exemplo.

 

No caso, o comando que puxa a idde automaticamente, é o $Idade. Como adiciono ele á função de cálculo de data?

 

Tentei:

 

$date = new DateTime(.'$Idade'.);

$date = new DateTime($Idade);

$date = new DateTime('$Idade');

 

Todos deram erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O formato deve ser AAAA-MM-DD. dê um var_dump na sua variável e veja se está vindo corretamente do banco de dados.

Bom dia, Carlos.

 

Alterei todas as datas para este formato e, no código, usei:

$date = new DateTime( '$Idade' ); // data de nascimento
$interval = $date->diff( new DateTime() ); // data definida

echo $interval->format( '%Y Anos, %m Meses e %d Dias' ); // 110 Anos, 2 Meses e 2 Dias

Mesmo assim, deu o seguinte erro:

Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() [<a href='datetime.--construct'>datetime.--construct</a>]: Failed to parse time string ($Idade) at position 0 ($): Unexpected character' in /home/www/listar.php:43 Stack trace: #0 /home/www/listar.php(43): DateTime->__construct('$Idade') #1 {main} thrown in /home/www/listar.php on line 43

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está aqui:

$date = new DateTime( '$Idade' );

Mas em vez de lhe responder porque ocorre esse erro, prefiro que você leia esse link para que nunca mais cometa o mesmo engano.

 

:yes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro está aqui:

$date = new DateTime( '$Idade' );

Mas em vez de lhe responder porque ocorre esse erro, prefiro que você leia esse link para que nunca mais cometa o mesmo engano.

 

:yes:

Oi, Carlos.

 

O comando completo é:

while($dados=mysql_fetch_array($exec)) {
$Idade=$dados["Idade"];

$date = new DateTime( '$Idade' ); // data de nascimento
$interval = $date->diff( new DateTime() ); // data definida

echo $interval->format( '%Y Anos, %m Meses e %d Dias' ); // 110 Anos, 2 Meses e 2 Dias

}

Ou seja, é definido como será puxado o $Idade, porém, mesmo assim ele não obtem o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

você não leu o conteúdo do link que lhe passei né?

 

Uma string definida com aspas simples não terá suas variáveis interpretadas pelo PHP, aspas duplas terão suas variáveis interpretas.

 

Sacou?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase 1 ano do ultimo post e achei esse código. Sou bem leigo no assunto php e esse código é o que preciso e deu certo, pra somar quantos anos uma empresa tem. Porem el imprime somente o Ano no final ( 19 anos tantos meses e tantos dias). No meu site eu tenho uma etiqueta que diz, (19 anos) no comércio. Mas e se a empresa tem menos de 1 ano, mesmo assim ele diz (0 anos) no comércio. Como fazer para mostrar (11 meses) por exemplo, ou (2meses) e se for dias ( 29 dias).

 

Tem como fazer com esse código?

 

Como quebrar as linhas no final para imprimir ano(s), mês ou dias.

 

Agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples. Verifique se a quantidade de anos > 1

Exemplo https://ideone.com/eITpUy

<?php

$date = new DateTime( '2006-01-11 16:08:00' ); // data e hora de nascimento
$interval = $date->diff( new DateTime( ) ); // data e hora atual
$ano =  $interval->format('%Y');
if($ano > 0){
	echo $interval->format( '%Y Anos, %m Meses, %d Dias, %H Horas, %i Minutos e %s Segundos' );
}else{
	echo $interval->format( '%m Meses, %d Dias, %H Horas, %i Minutos e %s Segundos' );
}	

Compartilhar este post


Link para o post
Compartilhar em outros sites

Oi Marcos, mas uma situação. Localhost ele funcionou show. Subi para o servidor e não funcionou. é a versão do PHP?

Este erro:Fatal error: Call to undefined method DateTime::diff() in

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá amigos, Boa tarde! 

Eu estou em processo de construção de um sistema, e minha dúvida é, que nele tem um formulário em que a pessoa se cadastra normalmente, e quando ela se cadastra, os dados dela vão direto para o Banco de dados e também fica disponível em uma parte do sistema pra pessoa ver se os dados estão certos dps. Mas eu quero que ao invés de usar um campo "Idade" em que ela coloca a exata idade e fique assim pra sempre, eu quero que essa data se atualize conforme o passar dos anos. Pensei diversas formas, mas nenhuma deu certo. Eu retiraria o campo idade e usaria só o data de nascimento, e com isso calcularia a idade, e jogaria direto pro campo da tabela. Sabem como me ajudar?? Se puderem, agradeço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Abra um novo tópico, conforme:

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.