Ir para conteúdo

POWERED BY:

Arquivado

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

arldin

calcular idade

Recommended Posts

Boa tarde amigos estou querendo mostra as idades dos usuarios estou usando este para calcular e mostra

<?php
   $data = $data_niver;
   list($d, $m, $a) = explode('/', $data);
   $hoje = mktime(0,0,0, date('m,d,a'));
   @$data_niver = mktime(0,0,0, $m, Sd, $a);
   $idade = floor((((($hoje - $data_niver)/ 60)/ 60)/ 24)/ 365.24);
   echo $idade
   ?>

So que ela mostra todos com a mesma idade de 45 anos mesmo que os anos seja diferentes

a data_niver e um campo no mysql se tiro o @ $data_niver ela retorna -1 se coloco as simples ou dupla aqui (0,0,0, $m, Sd, $a) da erro

Agradeço a ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se retorna -1, é porque alguma variável (d, m ou a) está com valor inválido.

 

1. Não use @ para esconder erros. Use-o apenas quando estritamente necessário. Veja esta dica

2. Habilite todas as exibições de erro, como mostrado neste tópico e teste novamente. Veja qual erro é retonrado

3. Dê um var_dump nas variáveis $d, $m e $a, para ver quais os valores que elas recebem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como voce surgeriu eu tirei o @ para ver o erro concertei na lina que era a 77

ficando assim

$data_niver = mktime(('0,0,0, $m, Sd, $a'));

mais continua retornando -1


dei o var_dump e ele me retornou isto

string '1982-02-01' (length=10)

null

null

-1 ano(s)

como resolvo isto


dei um assim

var_dump(0,0,0, $m, Sd, $a);

e me retorno o seginte

int 0

int 0

int 0

null

string 'Sd' (length=2)

null

-1 ano(s)


na outra eu tinha digitado errado

me retornou o seguite

int 0

int 0

int 0

null

string '1982-02-01' (length=10)

null

-1 ano(s)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Há uma coisa estranha:

 


string 'Sd' (length=2)

Parece que alguma de suas variáveis está com o valor "Sd" em vez de um número. Pode ser esse o motivo de mktime retornar -1.

 

Mas também há um erro de sintaxe aqui:

 

$data_niver = mktime(('0,0,0, $m, Sd, $a'));

 

Há dois grupos de parênteses. Isso equivale a passar só um parâmetro para mktime. O correto é assim:

 

$data_niver = mktime( 0, 0, 0, $m, $d, $a );

Compartilhar este post


Link para o post
Compartilhar em outros sites

fiz algumas alterações no codico que ficou asim

<?php
   $data = $data_niver;
   list($d, $m, $Y) = explode('/', $data);
   $hoje = mktime(0,0,0, date('d-m-Y'));
   $data_niver = mktime( 0, 0, 0, $m- $d- $Y );
   $idade = floor((((($hoje - $data_niver)/ 60)/ 60)/ 24)/ 365.24);
   var_dump( 0, 0, 0, $m- $d- $Y );
   echo $idade;
   ?>

dou o var_dump( 0, 0, 0, $m- $d- $Y ); e ele retorna assim

int 0

int 0

int 0

int -1982

45 ano(s)

dando a mesma idade para todos


pode ver que a idade esta erada pois se a pessoa nasceu em 1982 tem que ter 33 anos e não 45

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este e o codico do script que mostra os aniversariantes

<?php include("config.php");
?>
<HTML>
<HEAD>
<link HREF="aniversario.css" REL="stylesheet" TYPE="text/css" />
</HEAD>
<style type="text/css">
#scroll {
width:552px;
height:240px;
background-color:#F2F2F2;
overflow:auto;
}
</style>


<BODY>
<div ID="box">
<div CLASS="data">
<?php echo $hoje=date("d/m/Y");?>
  <?php
 echo "<strong>ANIVERSARIANTES DO DIA</strong> ";
 ?>
</div><!--data-->

     <div id="scroll">
        <div ID="ads">
        <script TYPE="text/javascript"><!--
        google_ad_client = "pub-6252101946778080";
        /* Lateral BIG */
        google_ad_slot =1693764700;
        google_ad_width = 160;
        google_ad_height = 600;
        //-->
        </script>
        <script TYPE="text/javascript"
        src="http://pageed2.googlesyndication.com/pageed/show_ads.js">
        </script>
        </div><!--ads-->
<?php
$aniver = date('d/m');
$sql = mysql_query("SELECT id, user_fname, user_email, data_niver, profImage
 FROM se_users
 WHERE (MONTH(data_niver) * 100 +  DAY(data_niver)) = (MONTH(NOW()) * 100 + DAY(NOW()))
 ORDER BY data ASC
 ")
 or die(mysql_error());
if (@mysql_num_rows($sql) == 0) {
 echo "<h2>Nenhum aniversariante hoje</h2>";
}
?>
<?php
while($res=mysql_fetch_array($sql)) {
 $id = $res[0];
 $user_fname = $res[1];
 $user_email = $res[2];
 $data_niver = $res[3];
 $profImage = $res[4];
 $uploadedimage = $res[5];
 $datah = date('d/m/Y', strtotime($data_niver)); 
?>
 <?php if($datah == $aniver) {
 echo "<div class=\"lista-hoje\">";
 }else {
 echo "<div class=\"lista\">";
 }
 ?>
 <div CLASS="thumb">
 <img width=75 height=75 src="<?php echo $uploadedimage;?><?php echo $profImage; ?>" />
 </div><!--thumb-->
 Olá este é nosso amigo(a) <strong><?php echo $user_fname; ?></strong><br> ele nasceu em:<strong> <?php echo date('d-m-Y', strtotime($data_niver)); ?></strong><br> e esta aniversariando <strong>Hoje</strong>
 Esta fazendo :
<?php
   $data = $data_niver;
   list($d, $m, $Y) = explode('/', $data);
   $hoje = mktime(0, 0, 0, date('d-m-Y'));
   $data_niver = mktime( 0, 0, 0, $m- $d- $Y );
   $idade = floor((((($hoje - $data_niver)/ 60)/ 60)/ 24)/ 365.24);
   var_dump( 0, 0, 0, $m- $d- $Y );
   echo $idade;
   ?>
      ano(s)
 </div><!--lista-->
<?php
}
?>
</div><!--content-->

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sua chamada a mktime está errada. Veja a documentação. Você deve passar os 6 parâmetros, todos inteiros. Nada de usar date() no meio de mktime()

 

Teste com o exemplo que mostrei no [anchorlink=2123570]post #5[/anchorlink].

Compartilhar este post


Link para o post
Compartilhar em outros sites

Outra forma de calcular a idade:

 

$dataNascimento = DateTime::createFromFormat('d/m/Y', '27/11/1993');
$dataHoje = new DateTime();
$diferenca = $dataHoje->diff($dataNascimento);
$idade = $diferenca->y;

Compartilhar este post


Link para o post
Compartilhar em outros sites

nesta parte do seu codico

$dataNascimento = DateTime::createFromFormat('d/m/Y', '27/11/1993');

ja tem uma data espesifica se eu colocar a data de algum usuario ela vai informa que todos tem o mesmo ano

a data de cada usuarios estão no mysql no campo data_niver

por exemplo eu tenho 3 usuarios que fazem aniversario no dia 02 do mes 03 um no ano de 1957, outro em 1981 e mais um em 1975 então cada usuario tera um idade diferente

Compartilhar este post


Link para o post
Compartilhar em outros sites
 
<?php
 
date_default_timezone_set('America/Sao_Paulo');
 
function Idade($data_nascimento) {
    $data_nascimento = strtotime($data_nascimento);
    $idade = floor(abs(strtotime(date('d/m/Y'))-$data_nascimento) /60/60/24/365);
    return $idade;
}
 
echo Idade('1992-01-06');
 

Ou você ainda pode fazer:

 

 

function calIdade($nascimento){
return floor( (time() - strtotime($nascimento) ) /     31556926);
}
 
echo calIdade('1992-05-06'); // Minha data de nascimento
 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Cara eu tive vários problemas também para calcular a diferença entre duas data (que é base para calculo da idade), até que passei usar a função strtotime(). Como que funciona:
- Primeiro as datas a serem usadas devem estar nopadrão "aaaa/mm/dd", ou seja, ano/mes/dia.
- Depois você aplica a função strtotime() às mesmas;
- Depois subtraia a menor da maior.
Exemplo:
$hoje='2015-02-02';
$dt_outra ='2014-02-02';


$diferenca = strtotime($hoje) - strtotime($dt_outra);
$dias = floor($diferenca / (60 * 60 * 24));
$anos = $dias/365;

É isto aí.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ou você ainda pode fazer:



function calIdade($nascimento){
return floor( (time() - strtotime($nascimento) ) /     31556926);
}

echo calIdade('1992-05-06'); // Minha data de nascimento





Achou mais simples =D

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi amigo paulinhosupriano teste a sua e apenas retorna a de um usuario se tiver mais da erro

 

oi amigo paulorn teste a sua não da erro mais não informa a idade de nenhum usuario

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu vi este topico so que o dele vai para outra pagina ate testei e vi que funciona

Mais no meu caso vai para um BD se caso eu quizer que insira a idade no banco vai inserir mais so que todas as vezes que ele completa aniversario vai a nostrar a idade que esta amarzena no DB


Eu vi este topico so que o dele vai para outra pagina ate testei e vi que funciona

Mais no meu caso vai para um BD se caso eu quizer que insira a idade no banco vai inserir mais so que todas as vezes que ele completa aniversario vai a nostrar a idade que esta amarzena no DB

Descupe e BD

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, e só usar a lógica, se tem um banco de dados e sabe usar o PHP a função vai funcionar perfeitamente com a data, mas seria interessante recuperar os aniversariantes do determinado mês.

 

Porem, tudo depende do projeto a qual foi criado.

 

 

Utilize um laço usando um SELECT onde o usuário logado seja excluído desse SELECT, assim, terás os aniversariantes do DIA.

 

NOTA:

 

Poderá melhorar a função e passar um array =D faça um foreach recuperando as datas e retorna em array ou montado(Tabela ou tableless) em seu projeto.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estamos quase resolvendo

segui a diga do amigo paulinhosupriano adapitie para o meu codico que ficou asim

</strong>
 Esta fazendo :
<?php
function calIdade($data_niver){
return floor( (time() - strtotime($data_niver) ) /     31556926);
}

echo calIdade($data_niver); // Minha data de nascimento
   ?>
 anos

faz o calculo certinho mais se eu tiver mais de um aniversariante me do o seguinte erro

Fatal error: Cannot redeclare Idade()
(previously declared in C:\wamp\www\Amiversariantes.php:74)
in C:\wamp\www\Amiversariantes.php on line 74
Call Stack
# Time Memory Function Location
1 0.0010 150432 {main}( ) ..\Amiversariantes.php:0

 

a linha mensiona e esta

function calIdade($data_niver){


se tiver apenas 1 não da este erro


e mostra a idade certa

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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