Probleme calcul date
Résolu/Fermé
moon136
Messages postés
71
Date d'inscription
samedi 12 août 2017
Statut
Membre
Dernière intervention
17 avril 2018
-
26 sept. 2017 à 00:56
moon136 Messages postés 71 Date d'inscription samedi 12 août 2017 Statut Membre Dernière intervention 17 avril 2018 - 6 oct. 2017 à 20:23
moon136 Messages postés 71 Date d'inscription samedi 12 août 2017 Statut Membre Dernière intervention 17 avril 2018 - 6 oct. 2017 à 20:23
A voir également:
- Probleme calcul date
- Calcul moyenne excel - Guide
- Calcul charpente bois gratuit - Télécharger - Architecture & Déco
- Logiciel gratuit calcul valeur nutritionnelle - Télécharger - Santé & Bien-être
- Logiciel calcul surface terrain gratuit - Télécharger - Outils professionnels
3 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
26 sept. 2017 à 08:52
26 sept. 2017 à 08:52
Bonjour,
Je n'ai pas tout compris à ton raisonnement, et notamment au m.setYear.
Je te déconseille d'utiliser une même variable pour gérer plusieurs informations différentes (tu le fais sur ce "m", tu le fais aussi plus haut avec le "ok"). Et nomme tes variables de façon explicite, tu t'y perdras moins.
De façon générale, pour calculer l'âge d'une personne, on regarde les jours du mois : si le jour anniversaire est inférieur au jour courant, on fait la différence ; sinon, on prend le complément à 30 et on enlève un mois.
Puis on regarde les mois, de la même manière.
Puis on calcule la différence en années.
Il y a quelques temps j'avais codé exactement la même fonction, tiens, j'ai retrouvé mon code :
Je n'ai pas tout compris à ton raisonnement, et notamment au m.setYear.
Je te déconseille d'utiliser une même variable pour gérer plusieurs informations différentes (tu le fais sur ce "m", tu le fais aussi plus haut avec le "ok"). Et nomme tes variables de façon explicite, tu t'y perdras moins.
De façon générale, pour calculer l'âge d'une personne, on regarde les jours du mois : si le jour anniversaire est inférieur au jour courant, on fait la différence ; sinon, on prend le complément à 30 et on enlève un mois.
Puis on regarde les mois, de la même manière.
Puis on calcule la différence en années.
Il y a quelques temps j'avais codé exactement la même fonction, tiens, j'ai retrouvé mon code :
function calculeAgeTextuel(naissance, jourJ, avecAnniversaire, pronom) { var resultat = ""; var ageJours = 0; var ageMois = 0; var ageAnnees = 0; var offsetMois = 0; var offsetAnnees = 0; // Calcul de la partie "jours" de l’âge if (jourJ.getDate() >= naissance.getDate()) ageJours = jourJ.getDate() - naissance.getDate(); else { ageJours = nbJoursDuMois(jourJ.getMonth() - 1) - naissance.getDate() + jourJ.getDate(); offsetMois = -1; } // Calcul de la partie "mois" de l’âge if (jourJ.getMonth() >= naissance.getMonth()) ageMois = jourJ.getMonth() - naissance.getMonth(); else { ageMois = 12 - naissance.getMonth() + jourJ.getMonth(); offsetAnnees = -1; } ageMois = ageMois + offsetMois; // Calcul de la partie "années" de l’âge ageAnnees = jourJ.getYear() - naissance.getYear() + offsetAnnees; // réalignement mois while (ageMois < 0) { ageMois = 12 + ageMois; ageAnnees = ageAnnees - 1; } // Écriture du résultat var isJours = ageJours != 0; var isMois = ageMois != 0; var isAnnees = ageAnnees != 0; var texteJ = ""; var texteM = ""; var texteA = ""; if (isJours && (isMois || isAnnees)) texteJ = "et "; if (isJours) texteJ += ageJours + ((ageJours > 1) ? " jours" : " jour"); if (isAnnees && isMois && !isJours) texteM = "et "; if (isMois) texteM += ageMois + " mois"; if (isAnnees) texteA = ageAnnees + ((ageAnnees > 1) ? " ans" : " an"); resultat = texteA + " " + texteM + " " + texteJ; if (ageAnnees == 0 && ageMois == 0 && ageJours == 0) resultat = "naissance"; if (naissance > jourJ) resultat = "pas né"; if (avecAnniversaire) { var texteAnniversaire = ""; if (!isJours && !isMois) texteAnniversaire = "<br/>C'est " + pronom + " anniversaire !"; else if (!isJours) texteAnniversaire = "<br/> C'est " + pronom + " moiniversaire !"; resultat += texteAnniversaire; } return resultat; } function nbJoursDuMois(mois) { var resultat = 30; if (mois == -1) mois = 11; if (mois == 0 || mois == 2 || mois == 4 || mois == 6 || mois == 7 || mois == 9 || mois == 11) resultat = 31; if (mois == 1) resultat = 28; return resultat; }
Bonjour merci pour ta réponse je comprend mieux à présent. Je vais tester et je te dirais quand ce sera résolu. Je n'ai pas de pc en ce moment
moon136
Messages postés
71
Date d'inscription
samedi 12 août 2017
Statut
Membre
Dernière intervention
17 avril 2018
6 oct. 2017 à 13:56
6 oct. 2017 à 13:56
j'ai resolu une partie du bug
en changeant 2 lignes dans la function getAge
mais quand on rentre la date 10/10/2000 cela affiche 17 ans et pas 16 ans. et je ne voi pas ou est le probleme
en changeant 2 lignes dans la function getAge
age_a = m.getFullYear()-d.getFullYear(); m.setFullYear(d.getFullYear());
mais quand on rentre la date 10/10/2000 cela affiche 17 ans et pas 16 ans. et je ne voi pas ou est le probleme
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
Modifié le 6 oct. 2017 à 16:36
Modifié le 6 oct. 2017 à 16:36
C'est parce que tu compares sur les années et mois, mais pas sur les jours.
moon136
Messages postés
71
Date d'inscription
samedi 12 août 2017
Statut
Membre
Dernière intervention
17 avril 2018
6 oct. 2017 à 20:23
6 oct. 2017 à 20:23
ah ok donc tu sais si je dois ajouter une condition ou une variable ? je nage complétement , merci de ton aide
6 oct. 2017 à 12:55
Merci