Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Prezados Colegas,
Mais uma vez venho perturbar o sossego de vocês, uma luz por favor!
1) Tenho um <input> para receber a data de nascimento:
<div class="campo">
<label for="data_nascimento">Data nascimento</label>
<input type="date" id="data_nascimento" name="dt_nascimento" style="width: 10em" required="required" maxlength="10" pattern="[0-9]{2}\/[0-9]{2}\/[0-9]{4}$" />
</div>
2) Busco receber esta data e fazer uma comparação, e se não passar nos requisitos mandar um alerta:
<?php
function calculoIdade($nascimento) {
$dataNascimento = new DateTime(implode("-", array_reverse(explode("/", $nascimento))));
$dataHoje = new DateTime();
$diferenca = $dataNascimento->diff($dataHoje);
if ($nascimento < 18){
alert('Você não é maior que 18 anos! Tem'. $diferenca->format('%y anos'));
}else if ($nascimento > 70){
alert('Você ultrapassou a idade limite! Tem'. $diferenca->format('%y anos'));
}else{
return 0;
}
}
?>
A quem puder ajudar,
Abs,
Rogério
Prezado Diego,
Segue exemplo de um colega e como eu penso em fazer, você digita a data de seu aniversario e através de onChange='calcularIdade()',
ele faz o calculo informando a idade do usuário, enviando um "alert" e limpando o campo.
function calcularIdade(){
dataNasc = document.getElementById("data_nascimento").value;
var dataAtual = new Date();
var anoAtual = dataAtual.getFullYear();
var anoNascParts = dataNasc.split('/');
var diaNasc = anoNascParts[0];
var mesNasc = anoNascParts[1];
var anoNasc = anoNascParts[2];
var idade = anoAtual - anoNasc;
var mesAtual = dataAtual.getMonth() + 1;
//se mês atual for menor que o nascimento,não faz aniversario ainda.
if (mesAtual < mesNasc){
idade--;
} else {
//se tiver no mes do nasc,verificar o dia
if (mesAtual <= mesNasc){
if (dataAtual.getDay() < diaNasc){
//se a data atual for menor que o dia de nascimento,quer dizer que ele ainda não fez aniversario
idade--;
}
}
}
// se ativar o return ele mata o alert!
//return idade;
alert("Sua idade é aproximadamente..:" + idade);
}
Penso em usar a mesma função mas com uma resalva de utilizar um código mais enxuto, seria o que exemplifico, nesta função PHP.
$nascimento = '08/09/1960';
$dataNascimento = new DateTime(implode("-", array_reverse(explode("/", $nascimento))));
$dataHoje = new DateTime();
$diferenca = $dataNascimento->diff($dataHoje);
echo $diferenca->format('%y anos');
O usuário terá que ter 18 à 70 anos (condição).
Gostaria de saber qual comando para trabalhar com data é melhor utilizar e porque?
Vou dizer-lhe que tentei fazer uma junção mais tenho muito caminho a percorrer ainda, embora já esteja no 3º período da faculdade, nos meus 54 anos.
Abs,
Poderá misturar JavaScript com PHP para obtere um código mais enxuto. Veja:
function calcularIdade(){
var anoNascParts = document.getElementById("data_nascimento").value.split('/');
var idade = <?php echo date("Y");?> - anoNascParts[2];
//se mês atual for menor que o nascimento,não faz aniversario ainda.
if (<?php echo date("m");?> < anoNascParts[1]){
idade--;
} else {
//se tiver no mes do nasc,verificar o dia
if (<?php echo date("m");?> <= anoNascParts[1]){
if (<?php echo date("d");?> < anoNascParts[0]){
//se a data atual for menor que o dia de nascimento,quer dizer que ele ainda não fez aniversario
idade--;
}
}
}
alert("Sua idade e aproximadamente..:" + idade);
}
Desta forma, retirei todo o código não necessário do JavaScript e utilizei funções PHP que calculam direto as datas, sem ter que montar incontáveis variáveis JavaScript para isso. Chamarei o exemplo acima de calcular_idade1.php.
Tomei a liberdade ainda e criei algumas verificações pro seu código e troquei o evento OnChange para o evento OnInput. Com o OnInput eu posso trabalhar com cálculos em tempo real, sem que a pessoa tenha que apertar um botão ou enviar um formulário para somente depois fazer os cálculos. Tudo se torna mais automático.
Toda vez que o visitante inserir um caractere qualquer dentro do meu Input, vou rodar o script automaticamente, uma vez para cada caractere inserido ou retirado. Para isto, criei a primeira verificação, que confere se a quantidade de caracteres inseridos já está de acordo com a quantidade de caracteres de uma data completa no Brasil (aqui a data completa tem 10 dígitos: 10/01/2002). Somente quando os 10 caracteres tiverem sido inseridos, o script vai, de fato, rodar.
Por fim, após a dependência ter sido respeitada, inseri todo o seu código normal mostrado logo acima, mais enxuto. Abaixo dele, inseri outra verificação: confere se a idade da pessoa está entre 18 e 70 anos. Caso não esteja, mostra uma mensagem negando acesso.
Chamaremos este código de calcular_idade2.php. Veja:
<script>
function calcularIdade(){
if(document.getElementById("data_nascimento").value.length < 10){return;}else{// Não executa a função caso a data digitada não esteja no formato indicado
var anoNascParts = document.getElementById("data_nascimento").value.split('/');
var idade = <?php echo date("Y");?> - anoNascParts[2];
//se mês atual for menor que o nascimento,não faz aniversario ainda.
if (<?php echo date("m");?> < anoNascParts[1]){
idade--;
} else {
//se tiver no mes do nasc,verificar o dia
if (<?php echo date("m");?> <= anoNascParts[1]){
if (<?php echo date("d");?> < anoNascParts[0]){
//se a data atual for menor que o dia de nascimento,quer dizer que ele ainda não fez aniversario
idade--;
}
}
}
// O código abaixo calcula se a idade do visitante está entre 18 e 70 anos e, caso não esteja, bloqueia o acesso.
if (idade >= 18 && idade <= 70){
alert("Tens "+idade+" anos, est\u00e1s dentro das regras e obter\u00e1s acesso!");
} else {
if(idade < 18){
var alerta = "Tens menos de 18 anos (tens "+idade+" ano[s]) e n\u00e3o obter\u00e1s acesso";
} else if (idade > 70){
var alerta = "Tens mais de 70 anos (tens "+idade+" ano[s]) e n\u00e3o obter\u00e1s acesso";
}
alert(alerta);
}
}
};
</script>
<input type="text" id="data_nascimento" OnInput="calcularIdade();">
Se quiser, poderá testar os dois códigos em pleno funcionamento nos links a seguir. Clique AQUI para o calcular_idade1.php ou clique AQUI para o calcular_idade2.php. Importante ressaltar que o OnChange só funciona depois que o campo de texto ou input PERDE o foco, quando se retira o cursor de dentro dele, pois somente assim o valor é, de fato, modificado.
EDIT: O mais interessante ainda é que o evento OnInput funciona mesmo se a pessoa COPIAR e COLAR o texto dentro do Input. Ela não precisa, necessariamente, digitar o texto. Ainda que ela copie e cole, funcionará da mesma forma.
Somente para comentar... todos temos um LONGO caminho a trilhar ainda, amigo! Por mais que saibamos, sempre precisamos da ajuda de alguém pra alguma coisa, por menor que seja rsrs
Precisando, pergunte. A comunidade está aqui para ajudar aos que desejam saber mais!
$data_atual = new DateTime();
$data_aniversario = new DateTime('2014-05-19');
$diff = $data_atual->diff($data_aniversario);
echo "Diferença de {$diff->y}";
se for no php, isso resolve.
A questão é que dá pra fazer simplesmente uma verificação de idade com PHP puro, mas pra verificar se a idade está dentro dos padrões e fazer bloqueio de acesso caso não esteja, vai ter que ficar dando refresh desnecessário na página, por isso o javascript. Eu diria que é melhor usar até mesmo o Ajax, pra simplificar o código.
Caros Diego e Mateus,
Agradeço a oportunidade de terem elucidado meus conhecimentos, e onde além o entendimento da lógica faz as coisas funcionarem.
Já resolvido!
Abs,
Amigo, trabalhe com o Timestamp para calcular a idade da pessoa. Siga o exemplo abaixo:
<?php
$dataNascimento = "1994/14/05"; // A data de nascimento da pessoa OBS: se não for neste formato a idade final terá 1 ano a mais que o real
$quebra_nascimento = explode("/",$dataNascimento); //Quebra a string que contém a data de nascimento em um array, cada campo do array com um valor diferente da data de nascimento para podermos trabalhar com os valores separados agora:
$time_nascimento = mktime(0,0,0,$quebra_nascimento[1],$quebra_nascimento[2],$quebra_nascimento[0]); //Calcula o timestamp do nascimento da pessoa no horário de Meia Noite
//Vale lembrar que no timestamp um valor de 86400 é igual a 24 horas, um dia completo
$idade = floor((($timestamp_idade / 86400) / 30) / 12); //Calcula a idade arredondando para baixo: divide o timestamp gerado por 86400 para achar a quantidade de dias, então divide por 30 para achar a quantidade de meses, depois divide por 12 para achar a quantidade de anos
Coloque o script acima numa nova página em branco no seu servidor e teste como está agora. Depois disso, confra o resultado. Depois teste novamente colocando a sua idade na string $dataNascimento seguindo o formato mostrado. Preste atenção nos comentários do script.
Tente entender o funcionamento, qualquer dúvida pergunte \o
OBS: Importante lembrar que nesse exemplo trabalhamos com a data de nascimento no horário da meia noite. Caso lhe seja necessário, poderá ter uma precisão maior perguntando a hora de nascimento da pessoa (incluindo minutos, para precisão máxima), assim a idade só aumentará em um ano após o exato horário definido (desnecessário para a maioria dos casos).
Edit: esqueci de comentar o explode() do script. Agora já está comentado.