Validating Date of birth

2

Hello, I am trying to validate birthdate less than 15 years using the following rule:

1- If the user enters the date of birth, check if the day, month and year that the user entered, is less than 15 years, if so, the button will be hidden.

Enter the following function below:

function calculaIdade(dobString) {

var data_nasc = document.getElementById('data_cri').value.split("/");
var verifica = data_nasc[2]+data_nasc[1]+data_nasc[0];

var dob = new Date(dobString);
var currentDate = new Date();
var currentYear = currentDate.getFullYear();
var birthdayThisYear = new Date(currentYear, dob.getMonth(), dob.getDate());
var verifica = currentYear - dob.getFullYear();

alert(verifica); //mostra a idade
alert(currentYear); // mostra o ano

alert(birthdayThisYear);

if (verifica >= 15 && currentYear < birthdayThisYear ){
    //alert('pode');
    document.getElementById('mostravid').style.display = "block";
} else {
    //alert('nao pode');
    document.getElementById('mostravid').style.display = "none";

}

if (verifica == ''){
    document.getElementById('mostravid').style.display = "none";

  }
}

<input type='text' name='data_cri' id='data_cri' value='<?=$data_cri?>' size='12' maxlength='10' onkeyup='formataData(this,this.value);' onblur='return calculaIdade(this.value)'>

For the time being it works by only validating for a year, I would like it to validate as follows:

The user was born 9/21/2000 but his age is 14 years using this function above, tomorrow is 22/09, the user will enter the data 22/09, the function will calculate 15 years, ok .

I'd like to help you figure it out.

Thank you

    
asked by anonymous 21.09.2015 / 16:31

4 answers

2

Well, it worked. I had to use ajax and php for security reasons, follow the script for anyone who wants to reuse.

 //Data de nascimento
$data_cri = date('Y-m-d',strtotime(str_replace('/','-',$_POST['data_cri'])));   

// data atual
$dt_fim = date('Y-m-d'); 

if (date('Y') - substr($data_cri,0,4) < 15){
        $date = str_replace('-', '/', $data_cri);
        echo "<div><h4>Data ".date('d/m/Y', strtotime($date))." fora do intervalo. <br> Menor que 15 anos não pode ser cadastrado!<h4> </div>"; 

}

// diferenca entre duas datas
if( isset($data_cri) && $data_cri!="" && isset($dt_fim) && $dt_fim!="") {
    $data_cri = DateTime::createFromFormat('Y-m-d', $data_cri);
    $dt_fim = DateTime::createFromFormat('Y-m-d', $dt_fim);

    if ((int)$dt_fim->diff($data_cri)->format('%y') >=15){
        echo "<div align='center'><input type='submit' value='Prosseguir'></div>";
        echo "<div align='center'><h3>Idade: ".(int)$dt_fim->diff($data_cri)->format('%y').' anos<h3></div>';
    }
} 
    
21.09.2015 / 21:14
2

a solution counting the milliseconds

//define as duas datas base...
var actualDate = new Date();
//validando 25/09/2000 que ainda nao completou 15 anos
var birthDate = new Date("2000", "8", "25", "0", "0", "0");

// pega o milisegundo de cada uma
var actualMili = actualDate.getTime();
var selectMili = birthDate.getTime();

// 15 anos em milisegundos
var timeToTest= 1000 * 60 * 60 * 24 * 365 * 15; //15 anos em mili segundos...

//faz a diferença entre as datas e o tempo calculado
if( ( actualMili -  selectMili) >= timeToTest){
  document.body.textContent = "Pessoa com mais de 15 anos";
}
else{
  document.body.textContent = "Pessoa com menos de 15 anos";
}
    
21.09.2015 / 16:57
1

You can simply add 15 years to the current date.

var formulario = document.getElementById("formulario");
var nascimento = document.getElementById("nascimento");
var enviar = document.getElementById("enviar");

var mensagemErro = function (event, input, mensagem) {
  //input.setCustomValidity(mensagem);
  alert(mensagem);
  event.preventDefault();
}

formulario.addEventListener("submit", function (event) {
  var data = nascimento.value;
  //nenhuma data informada
  if (!data) {
    return mensagemErro(event, nascimento, "Campo nascimento não informado");
  }

  //O browser não realizou a conversão de forma nativa
  if (!(data instanceof Date)) {
    data = data.split('/').reverse().join('-');
    data = Date.parse(data);
    if (!isNaN(data)) {
      data = new Date(data);
    }
  }

  //a data informada não é valida
  if (!data) {
    return mensagemErro(event, nascimento, "Campo nascimento não é valido");
  }

  var atual = new Date();
  data.setFullYear(data.getFullYear() + 15);  

  //menor de 15 anos.
  if (data > atual) {
    return mensagemErro(event, nascimento, "Nascimento posterior a 15 anos atrás");
  }
})
<form id="formulario">
  <input id="nascimento" type="date" />
  <input id="enviar" type="submit" value="Enviar" />
</form>

In the case above, I'm using an input of type date, so I just need to convert the date manually if the value property does not return me a date.

    
21.09.2015 / 18:03
1

Create a date object with the user's date of birth and another date with the current date minus 15 years. If the user's date of birth is less than the current date less 15 years the user is under the age of 15.

function idadeMaiorQue(dataNascimento, idadeMinima) {
    var userDob = new Date(dataNascimento);
    var maxDob = new Date();

    maxDob.setFullYear(maxDob.getFullYear() - idadeMinima);

    return !(userDob < maxDob);
}
    
21.09.2015 / 20:29