Ir para conteúdo

Arquivado

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

Daniele Prada

[Resolvido] Mostrar idade no perfil rede social

Recommended Posts

Boa noite pessoal, eu sou muito iniciante em php e preciso de uma ajuda que aparenta ser simples! Estou iniciando uma rede social, e no perfil do usuário, ele mostra o ano de nascimento (dia/ms/ano), como mostra na figura. Eu gostaria que mostrasse a idade (xx anos).o que eu devo alterar neste código?

{if $profile['user_birthdate'] != null}
    {if $profile['user_id'] == $user->_data['user_id'] || $profile['user_privacy_birthdate'] == "public" || ($profile['user_privacy_birthdate'] == "friends" && $profile['we_friends'])}
        <li>
            <div class="about-list-item">
                <i class="fa fa-calendar fa-fw fa-lg"></i>
                {$profile['user_birthdate']|date_format:"%d/%m/%Y"}
            </div>
        </li>
    {/if}
{/if}

1.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desse modo não precisa nem usar date format para retornar a idade.

 

Coloque essa função num arquivo que é incluso nas páginas para não ter redundância no código:

function retIdade($nascimento){	
	// Separo em dia, mês e ano
	list($ano, $mes, $dia) = explode('-', $nascimento);
	
	// Descubro o timestamp Unix da data de nascimento do profile
	$timestampNascimento = mktime( 0, 0, 0, $mes, $dia, $ano);
	// Descubro que dia é hoje e retorna o timestamp Unix
	$timestampHoje = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
	
	
	// Depois apenas faço o cálculo(divido por 60 segundos, depois 60 minutos, depois 24 horas, e depois 365.25 dias(pra compensar anos bissextos)
	$idade = (((($timestampHoje - $timestampNascimento) / 60) / 60) / 24) / 365.25;
	
	//Arredondo a idade para baixo
	return floor($idade);
}

E então é só colar isso onde você quiser mostrar:

echo retIdade($profile['user_birthdate']);

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque o código entre as chaves, da mesma maneira que está usando em todo o restante do código

 

{echo retIdade($profile['user_birthdate'])}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu precisaria ter acesso ao código da rede social como um todo pra saber como ele faz pra mostrar os dados, porque a função que te passei está funcionando perfeitamente

 

Spoiler

image.thumb.png.c1e785cb2127aa4c9fb5ca1e41650b56.png

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual framework e/ou template builder (tem cara de ser o smarty) você está usando? Isso pode direcionar a resposta correta.

 

O motivo de ter aparecido a função diretamente na página e não a interpretação dela, é pelo template builder que está utilizado não interpretar diretamente funções PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso seja o Smarty, crie a função como um modifier

<?php

/*
 * Smarty plugin
 * -------------------------------------------------------------
 * File:     modifier.age.php
 * Type:     modifier
 * Name:     age
 * Purpose:  Calculate the age of a string date
 * -------------------------------------------------------------
 * @author Gabriel Heming
 * @param string $date Input date string 
 * @param string $format Input date string format
 * @return int
 */
function smarty_modifier_age($date , $format = 'Y-m-d')
{
    if(!$dateTime = DateTime::createFromFormat($format , $date))
    {
        throw new \RuntimeException('Invalid Date format');
    }
    
    return (int)($dateTime->diff(new \DateTime() , true)->format('%y'));
}

echo smarty_modifier_calculate_age('2000-01-01');

Exemplo em funcionamento: https://3v4l.org/KpOch

 

Crie um arquivo chamado modifier.age.php e adicione na pasta definida em $plugins_dir.

 

Após, basta usar no seu código da seguinte forma:

{$profile['user_birthdate']|age}

Caso a data possua um formato diferente de 'Y-m-d' (aaaa-mm-dd), adicione como parâmetro:

{$profile['user_birthdate']|age:'d/m/Y'}

 

PS.: nunca utilizei Smarty antes, mas isso deve funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na primeira tentativa do amigo Julinhooo, ja funcionou!segue o resultado:

 

public function retIdade($nascimento){	
	// Separo em dia, mês e ano
	list($ano, $mes, $dia) = explode('-', $nascimento);
	
	// Descubro o timestamp Unix da data de nascimento do profile
	$timestampNascimento = mktime( 0, 0, 0, $mes, $dia, $ano);
	// Descubro que dia é hoje e retorna o timestamp Unix
	$timestampHoje = mktime(0, 0, 0, date('m'), date('d'), date('Y'));
	
	
	// Depois apenas faço o cálculo(divido por 60 segundos, depois 60 minutos, depois 24 horas, e depois 365.25 dias(pra compensar anos bissextos)
	$idade = (((($timestampHoje - $timestampNascimento) / 60) / 60) / 24) / 365.25;
	
	//Arredondo a idade para baixo
	echo floor($idade);
}

 

{retIdade($profile['user_birthdate'])}

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por binds
      Olá Caríssimos,
       
      Não tenho muito conhecimento de javascript, desde já agradeço se alguém puder me ajudar.
      Preciso criar uma página simples de validação por idade para acessar uma página, a ideia é simples:
      se a pessoa nasceu antes de 2002 redireciona a página meusite_com_br/maior 
      mas se ela nasceu depois de 2002 redireciona a página meusite_com_br/menor
      Garimpando achei o código abaixo que fiz alguns ajustes, porém não sei como abrir as respectivas paginas meusite_com_br/menor ou meusite_com_br/maior como resultado, o resultado nesse caso são textos:  "MENOR 18" : "MAIOR DE 18"
       
      <!DOCTYPE html> <html> <body> <CENTER> <h2>Validador de Idade</h2> <p>Digite o ano que você nasceu para acessar o site:</p> <input id="age" value="Ex: 1990" /> <br> <button onclick="myFunction()">ACESSAR SITE</button> <p id="demo"></p> <script> function myFunction() {   var age, voteable;   age = Number(document.getElementById("age").value);   if (isNaN(age)) {     voteable = "Você não inseriu um ano válido. <BR> Exemplo: 2020";   } else {     voteable = (age > 2002) ? "MENOR 18" : "MAIOR DE 18";   }   document.getElementById("demo").innerHTML = voteable; } </script> </CENTER> </body> </html>  
      Novamente agradeço a ajuda!
      Luis
       
    • Por Gustavo Sobral
      Alguém sabe como fazer um comando sql para retornar um range de idades?
       
      Por exemplo, na tabela pessoa eu tenho a data de nascimento. Eu preciso então trazer todas as pessoas com idade entre 20 e 30 anos.
    • Por klonder
      Olá a todos!
      Todos sabemos o quanto é difícil para o Java retornar, de modo fácil, a idade no formato: anos, meses e dias. Não estou me referindo a retornar o tempo entre duas datas em anos, o mesmo tempo em meses ou o mesmo em dias. Refiro-me a retornar quanto tempo uma determinada pessoa tem de vida, exemplo: 30 anos, 12 meses e 4 dias de vida.
      Sabemos ainda que existem os anos bissextos, o que complica o cálculo em algumas situações. O JAVA não nos ajuda de modo automático, como em alguma outra linguagem.
      Pensando nisso, desenvolvi um método que analisa as diversas situações e resolvi compartilhar, para outros colegas e para minhas consultas futuras. O método recebe como parâmetro uma data no formato yyyy-MM-dd (escolhi esse formato pois já vem do banco de dados) e retorna a idade no formato: 30a 4m 2d.
      JAVAFX: Retornar idade em anos, meses e dias:
      public String Idade(String dt_nasc) {//yyyy-MM-dd Calendar calHoje = GregorianCalendar.getInstance(); int diah = calHoje.get(Calendar.DAY_OF_MONTH); int mesh = calHoje.get(Calendar.MONTH) + 1; int anoh = calHoje.get(Calendar.YEAR); // Data do nascimento. String[] quebraDN = dt_nasc.split("-"); int dian = Integer.valueOf(quebraDN[2]); int mesn = Integer.valueOf(quebraDN[1]); int anon = Integer.valueOf(quebraDN[0]); String strNiver = anoh+"-"+mesn+"-"+dian; Calendar calNiver = Calendar.getInstance(); try { calNiver.setTime(new SimpleDateFormat("yyyy-MM-dd").parse(strNiver)); } catch (ParseException ex) { Logger.getLogger(FormataData.class.getName()).log(Level.SEVERE, null, ex); } int anos = (calHoje.getTimeInMillis() < calNiver.getTimeInMillis())? (anoh-anon-1):anoh-anon ; int meses; int dias; meses = mesh - mesn; if (meses > 0) {//Verificando se já fez aniversário ou não if (diah < dian) { meses--; } } else if (meses < 0) {//Se o mês atual for menor que o mês do aniversário meses = 12 + meses;//Lembrar que meses está negativo, por isso a soma; //Da mesma forma, vamos comparar o dia atual com o dia do aniversário, para sabermos se o mês está completo ou não: if (diah < dian) { meses--; } } else {//Se o mês atual for o mês do aniversário: if (diah<dian) { meses = 11; } } dias = diah - dian; if (dias < 0) {//Se dia hoje menor que dia do niver, somar os dias desde o mês anterior: if (mesh==5||mesh==7||mesh==8||mesh==10||mesh==12) { dias = 30-dian+diah; } else if (mesh==1||mesh==2||mesh==4||mesh==6||mesh==9||mesh==11) { dias = 31-dian+diah; } else {//Verificando se o ano é bissexto ou não: Esse else é para o mês 3, cujo anterior é fevereiro: if (anoh%4 == 0) { dias = 29-dian+diah; } else { dias = 28-dian+diah; } } } System.out.println(anos+"a "+meses+"m "+dias+"d"); return anos+"a "+meses+"m "+dias+"d"; } Basta invocar o método através do evento de algum outro objeto, ou mesmo durante execução.
      Divirtam-se!
    • Por Sandson
      Olá! Eu gostaria de saber como que eu faço para criar uma idade automática para cada administrador do site.
      Exemplo:
      Fulano é designer, tem "21" anos, casado...................
      Onde 21 é o código, pra que seja alterado automaticamente, sem eu ter que atualizar manualmente...
      Eu não sei como fazer isso... Sou novo no wordpress, principalmente no php.
      Agradeço a ajuda.
      PS.: Eu quero adicionar essa função dentro do Slider Revolution
×

Informação importante

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