Ne fonctionne pas correctement; affiche toujours "au-dessus de 16". J'ai tweeking la déclaration if mais je n'ai pas pu le comprendre. Besoin d'aide, merci!

function hasDateCheck() {
  let dateSpliter = document.querySelector("#dateOfBirth").value.split("-");
  console.log(`${dateSpliter[0]} ${dateSpliter[1]} ${dateSpliter[2]}`); // YYYY MM DD

  let today = new Date();
  let dd = today.getDate();
  let mm = today.getMonth();
  mm++;
  let yyyy = today.getFullYear();

  if (yyyy - dateSpliter[0] < 16 && mm - dateSpliter[1] < 0 && dd - dateSpliter[2] < 0) {
    console.log("below 16");
  } else {
    console.log("above 16");
  }
}

document.querySelector("#submit").addEventListener("click", (e) => {
  e.preventDefault();
  hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">
0
Nirzar 11 févr. 2021 à 10:03

5 réponses

Meilleure réponse
if (yyyy - dateSpliter[0] > 16) {
        console.log("above 16");
    } else if (
        yyyy - dateSpliter[0] == 16 &&
        mm - dateSpliter[1] >= 0 &&
        dd - dateSpliter[2] >= 0) 
    {
        console.log("above 16");
    } else {
        guardianDetailsCheck();
        console.log("below 16");
    }
}
0
Nirzar 11 févr. 2021 à 08:29

Utilisez cette fonction pour calculer l'âge.

function age(birthday)
{
  birthday = new Date(birthday);
  return new Number((new Date().getTime() - birthday.getTime()) / 31536000000).toFixed(0);
}
0
Aniket 11 févr. 2021 à 07:24

Utilisez simplement momentjs si vous pouvez importer un package

var a = moment([2007, 0, 29]);
var b = moment([2007, 0, 28]);
a.diff(b, 'years')

momentjs docs

0
Jithin 11 févr. 2021 à 07:24

Votre condition if est invalide,

Remplacez votre condition si par ceci,

if (yyyy - dateSpliter[0] <= 16 && mm - dateSpliter[1] <= 0 && dd - dateSpliter[2] <= 0) {
   console.log("below 16");
} else {
   console.log("above 16");
}

Si vous voulez calculer l'âge, référez-vous à la réponse @Aniket

0
Sagar Davara 11 févr. 2021 à 07:27

Votre condition est incorrecte, car si la date d'aujourd'hui était le 15 janvier 2021 et que vous avez entré le 1er janvier 2000, elle la rejetterait, car le jour est plus petit, même si l'année < / em> est supérieur de plus de 16.

Le moyen le plus simple (avec moins de mises en garde) de le convertir en un horodatage Unix (un nombre représentant les millisecondes passées depuis le 1er janvier 1970), et de comparer de cette façon:

function hasDateCheck() {
  const [YYYY, MM, DD] = document.querySelector("#dateOfBirth").value.split("-");
  const birthDate = new Date(+YYYY, +MM - 1, +DD)

  //                          year day   hour min  sec  millisec
  if(Date.now() - birthDate < 16 * 365 * 24 * 60 * 60 * 1000) {
    console.log("below 16");
  } else {
    console.log("above 16");
  }
}

document.querySelector("#submit").addEventListener("click", (e) => {
  e.preventDefault();
  hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">

Vous pourriez rencontrer des problèmes en raison d'années bissextiles (pour chaque année bissextile, imprécision de +/- 1 jour). Vous pouvez ignorer ce problème (quelques jours ne causent généralement pas de problèmes), mettre en œuvre un comportement de vérification plus complexe ou réduire l'inexactitude en ajoutant 4 jours à la date (il y a environ 16 / 4 = 4 années bissextiles dans une période de 16 ans gamme):

function hasDateCheck() {
  const [YYYY, MM, DD] = document.querySelector("#dateOfBirth").value.split("-");
  const birthDate = new Date(+YYYY, +MM - 1, +DD)

  //                           year day        hour min  sec  millisec
  if(Date.now() - birthDate < (16 * 365 + 4) * 24 * 60 * 60 * 1000) {
    console.log("below 16");
  } else {
    console.log("above 16");
  }
}

document.querySelector("#submit").addEventListener("click", (e) => {
  e.preventDefault();
  hasDateCheck();
});
<input name="dateOfBirth" id="dateOfBirth" type="date" required/>
<input type="submit" id="submit" value="Submit" id="formSubmit">
0
FZs 11 févr. 2021 à 14:38