Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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}
eu fiz ...e segue o erro

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'])}
Desta forma, a página sai totalmente fora do ar
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

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.
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') 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](https://3v4l.org/KpOch)
Crie um arquivo chamado modifier.age.php e adicione na pasta definida em [$plugins_dir](https://www.smarty.net/docsv2/en/variable.plugins.dir.tpl).
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.
Muito, muito, muito obrigada pessoal. Funcionou perfeitamente!
@Daniele Prada Qual solução que funcionou?
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'])}
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: