Estou procurando uma maneira de calcular a idade de uma pessoa, considerando seu DOB no formato dd / mm / aaaa.
Eu estava usando a função a seguir, que funcionou bem por vários meses, até que algum tipo de falha fez com que o loop while nunca terminasse e parasse todo o site. Como existem quase 100.000 DOBs passando por essa função várias vezes ao dia, é difícil definir o que estava causando isso.
Alguém tem uma maneira mais confiável de calcular a idade?
//replace / with - so strtotime works
$dob = strtotime(str_replace("/","-",$birthdayDate));
$tdate = time();
$age = 0;
while( $tdate > $dob = strtotime('+1 year', $dob))
{
++$age;
}
return $age;
EDIT: esta função parece funcionar OK algumas vezes, mas retorna "40" para um DOB de 14/09/1986
return floor((time() - strtotime($birthdayDate))/31556926);
mktime()
. parece php calculou malstrtotime()
com esse formato.strtotime
entende perfeitamente formatos de data, você não precisa se preocupar:Dates in the m/d/y or d-m-y formats are disambiguated by looking at the separator between the various components: if the separator is a slash (/), then the American m/d/y is assumed; whereas if the separator is a dash (-) or a dot (.), then the European d-m-y format is assumed.
php.net/manual/en/function.strtotime.phpA partir do PHP 5.3.0, você pode usar o prático
DateTime::createFromFormat
para garantir que sua data não seja confundida com om/d/Y
formato e aDateInterval
classe (viaDateTime::diff
) para obter o número de anos entre agora e a data prevista.fonte
fonte
Eu uso Data / Hora para isso:
fonte
Método simples para calcular a idade do dn:
31556926
é o número de segundos em um ano.fonte
$_age = floor((time() - strtotime('1986-09-16')) / 31556926);
// Calculadora de idade
fonte
Acho que isso funciona e é simples.
Subtraia de 1970 porque strtotime calcula o tempo de 01-01-2009 ( http://php.net/manual/en/function.strtotime.php )
Resultados:
fonte
Se você deseja calcular a idade de uso da dob, também pode usar esta função. Ele usa o objeto DateTime.
fonte
Imaginei que eu jogaria isso aqui, já que essa parece ser a forma mais popular dessa questão.
Eu fiz uma comparação de 100 anos em três dos tipos mais populares de funções de idade que eu poderia encontrar para PHP e postei meus resultados (assim como as funções) no meu blog .
Como você pode ver lá , todas as 3 funções são pré-formadas com uma pequena diferença na 2ª função. Minha sugestão com base nos meus resultados é usar a 3ª função, a menos que você queira fazer algo específico no aniversário de uma pessoa; nesse caso, a 1ª função fornece uma maneira simples de fazer exatamente isso.
Minhas sugestões após minha revisão de 100 anos:
Se você quiser algo mais alongado para incluir ocasiões como aniversários e outras coisas:
Mas se você simplesmente quer saber a idade e nada mais, então:
Veja BLOG
Uma observação importante sobre o
strtotime
método:fonte
Você pode usar a
Carbon
biblioteca , que é uma extensão de API para DateTime.Você pode:
ou:
fonte
age
, que está fazendo adiffInYears
. Então você pode escrever:(new \Carbon\Carbon($date))->age
Se você não precisa de grande precisão, apenas o número de anos, considere usar o código abaixo ...
Você só precisa colocar isso em uma função e substituir a data "1971-11-20" por uma variável.
Observe que a precisão do código acima não é alta devido aos anos bissextos, ou seja, a cada 4 anos, os dias são 366 em vez de 365. A expressão 60 * 60 * 24 * 365 calcula o número de segundos em um ano - você pode substitua-o por 31536000.
Outra coisa importante é que, devido ao uso do carimbo de data e hora do UNIX, ele tem o problema do ano de 1901 e do ano de 2038, o que significa que a expressão acima não funcionará corretamente em datas anteriores ao ano de 1901 e após o ano de 2038.
Se você pode conviver com as limitações mencionadas acima, esse código deve funcionar para você.
fonte
fonte
fonte
Eu encontrei este script confiável. Ele assume o formato da data como AAAA-mm-dd, mas pode ser modificado para outros formatos com bastante facilidade.
fonte
fonte
i18n:
fonte
Tente qualquer um destes usando o objeto DateTime
Referência http://www.calculator.net/age-calculator.html
fonte
Escreva um script PHP para calcular a idade atual de uma pessoa.
Data de nascimento da amostra: 11.4.1987
Solução de amostra:
Código PHP:
Saída de amostra:
Sua idade: 30 anos, 3 meses, 0 dias
fonte
esta é minha função para calcular o DOB com o retorno específico de idade por ano, mês e dia
isto como usá-lo
fonte
Esta função retornará a idade em anos. O valor de entrada é uma string de dia de nascimento com formato de data (AAAA-MM-DD), por exemplo: 2000-01-01
Funciona com dia - precisão
Saúde, nira
fonte
Se você não consegue usar algumas das funções mais recentes, aqui está algo que eu criei. Provavelmente mais do que você precisa, e tenho certeza de que existem maneiras melhores, mas é fácil de ler, por isso deve fazer o trabalho:
Exemplo de uso:
Espero que isto ajude.
fonte
Devido ao ano bissexto, não é aconselhável subtrair uma data de outra e calculá-la pelo número de anos. Para calcular a idade como os humanos, você precisará de algo como isto:
fonte
O seguinte funciona muito bem para mim e parece ser muito mais simples do que os exemplos que já foram dados.
Eu testei e uso ativamente esse código, pode parecer um pouco complicado, mas é muito simples de usar e editar e é bastante preciso.
fonte
Seguindo a primeira lógica, você deve usar = na comparação.
fonte
É um problema quando você usa strtotime com DD / MM / AAAA. Você não pode usar esse formato. Em vez disso, você pode usar MM / DD / AAAA (ou muitos outros como AAAAMMDD ou AAAA-MM-DD) e deve funcionar corretamente.
fonte
Que tal iniciar esta consulta e ter o MySQL calculando para você:
Resultado:
O usuário tem 27 anos e 6 meses (conta um mês inteiro)
fonte
Eu fiz assim.
fonte
A melhor resposta para isso é boa, mas apenas calcula o ano em que uma pessoa nasceu, eu a ajustei para meus próprios propósitos, para trabalhar dia e mês. Mas pensei que valia a pena compartilhar.
Isso funciona com um registro de data e hora do DOB do usuário, mas fique à vontade para alterar esse
fonte
Se você deseja obter apenas anos completos com a idade, há uma maneira super simples de fazer isso. trate datas formatadas como 'AAAAMMDD' como números e subtraia-as. Depois disso, cancele a parte do MMDD dividindo o resultado com 10000 e coloque-o no chão. Simples e nunca falha, leva até em consideração os leapyears e a hora atual do servidor;)
Desde birthays ou principalmente fornecidos por datas completas no local do nascimento e são relevantes para o TEMPO LOCAL ATUAL (onde a verificação da idade é realmente feita).
portanto, se você quiser verificar se alguém tem 18 ou 21 anos ou menos de 100 no seu fuso horário (não se preocupe com o fuso horário de origem) por aniversário, esta é a minha maneira de fazer isso
fonte
Tente o seguinte:
fonte