Ir para conteúdo

Arquivado

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

rogarfil

Pegar nascimento no input calcular idade

Recommended Posts

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

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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
$agora = time();
$timestamp_idade = $agora - $time_nascimento;
//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
echo $idade;
?>

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
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,

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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