9
respostas

onde eu estou errando que continua validando menores de 18?

fala pessoal, podem por favor me ajudar, eu ja tentei as soluções dos outros tópicos mas não consegui encontrar onde estou errando. continua validando quando coloco a data de hoje.

const dataNascimento = document.querySelector('#nascimento');

dataNascimento.addEventListener('blur', (evento) => {
  validaDataNascimento(evento.target);
})

function validaDataNascimento(input) {
  const dataRecebida = new Date(input.value);
  let mensagem = '';

  if (!maiorQue18(dataRecebida)) {
    mensagem = 'Você deve ter mais que 18 anos.';

  }

  input.setCustomValidity(mensagem);
}

function maiorQue18(data) {

  console.log(data);

  const dataAtual = new Date();
  const dataMais18 = new Date(data.getUTCFullYear() + 18, data.getUTCFullMonth(), data.getUTCFullDate());


  return dataMais18 <= dataAtual;
}
9 respostas

O meu também estava dando validando menor que 18. Abrindo o console no navegador vi que estava dando erro no: data.getUTCFullDate() tirei o Full e saiu o erro.

.....

Mesmo Erro

Pra mim apareceu o mesmo erro. Mas resolvi.

Tenta usar: const dataMais18 = new Date((data.getUTCFullYear() + 18), data.getUTCMonth(), data.getUTCDate());

(0 que fiz foi retirar o 'Full' do mês e do dia).

Consegui resolver assim. O site com as referências que eu usei é esse: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Global_Objects/Date/getUTCDate

Mesmo erro aqui também :(

Pessoal, o meu também estava validando idades menores que 18 anos. No meu caso, o erro estava no local da pasta 'js'. Eu acabei criando a pasta "js" sem perceber dentro da pasta "assets" e não na raiz como o instrutor havia recomendado. Dessa forma, no HTML, a chamada deve ficar assim:

<script src = "./assets/js/validacao.js" ></script>

No trecho do código

const dataMais18 = new Date(data.getUTCFullYear() + 18, data.getUTCFullMonth(), data.getUTCFullDate());

Escreve sem o Full para mês e dia:

const dataMais18 = new Date(data.getUTCFullYear()+18, data.getUTCMonth(), data.getUTCDate());

Estava com esse mesmo problema, e assim resolveu. Verifica também se não há algum erro na chamada do JS no arquivo HTML :D

Nenhuma solução definitiva? Alguma atualização no javascript que bugou esse código? Meu também valida datas menores que 18.

Segue o código funcionando:

const dataNascimento = document.querySelector('#nascimento')

dataNascimento.addEventListener('blur', (evento) => {
    validaDataNascimento(evento.target)
})

function validaDataNascimento(input) {
    const dataRecebida = new Date(input.value);
    let mensagem = ''

    if(!maiorQue18(dataRecebida)) {
    mensagem = 'Você deve ser maior que 18 anos para se cadastrar.' 
    }

    input.setCustomValidity(mensagem);   
}

function maiorQue18(data) {
    console.log(data)
    const dataAtual = new Date();  //date() é automaticamente preenchido com a data atual
    const dataMais18 = new Date(data.getUTCFullYear() + 18, data.getUTCMonth(), data.getUTCDate())

    return dataMais18 <= dataAtual
}