arldin 1 Denunciar post Postado Fevereiro 1, 2015 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
Beraldo 864 Denunciar post Postado Fevereiro 1, 2015 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
arldin 1 Denunciar post Postado Fevereiro 1, 2015 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)nullnull-1 ano(s) como resolvo isto dei um assim var_dump(0,0,0, $m, Sd, $a); e me retorno o seginte int 0int 0int 0nullstring 'Sd' (length=2)null-1 ano(s) na outra eu tinha digitado errado me retornou o seguite int 0int 0int 0nullstring '1982-02-01' (length=10)null-1 ano(s) Compartilhar este post Link para o post Compartilhar em outros sites
Rogério Santana 172 Denunciar post Postado Fevereiro 1, 2015 var_dump(0,0,0, $m, Sd, $a); tem um S e não $ Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 1, 2015 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
arldin 1 Denunciar post Postado Fevereiro 1, 2015 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 0int 0int 0int -198245 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
arldin 1 Denunciar post Postado Fevereiro 2, 2015 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
Beraldo 864 Denunciar post Postado Fevereiro 2, 2015 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
Anderson Danilo 43 Denunciar post Postado Fevereiro 2, 2015 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
arldin 1 Denunciar post Postado Fevereiro 2, 2015 desta forma que voce me passou não retorna nada Anderson DaniloEu teste do jeito que voce me falou so que daquele jeito continuava dando -1 e nesta alteração ela retorna 45 Beraldo Compartilhar este post Link para o post Compartilhar em outros sites
Anderson Danilo 43 Denunciar post Postado Fevereiro 2, 2015 Qual a sua versão do PHP? a função createFromFormat esta disponível a partir da versão 5.3 Exemplo: https://ideone.com/toskws Compartilhar este post Link para o post Compartilhar em outros sites
arldin 1 Denunciar post Postado Fevereiro 2, 2015 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
paulinhosupriano 103 Denunciar post Postado Fevereiro 2, 2015 <?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
paulorn 1 Denunciar post Postado Fevereiro 2, 2015 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
paulinhosupriano 103 Denunciar post Postado Fevereiro 2, 2015 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
arldin 1 Denunciar post Postado Fevereiro 2, 2015 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
Rogério Santana 172 Denunciar post Postado Fevereiro 2, 2015 Tem um tópico resolvido veja http://forum.imasters.com.br/topic/490826-calculo-de-idade-em-php/ Compartilhar este post Link para o post Compartilhar em outros sites
arldin 1 Denunciar post Postado Fevereiro 2, 2015 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
paulinhosupriano 103 Denunciar post Postado Fevereiro 2, 2015 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
arldin 1 Denunciar post Postado Fevereiro 3, 2015 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 74Call Stack# Time Memory Function Location1 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