Aller au contenu

Question

Nouveau, Posté(e)
elkaporal94 Nouveau 3 messages
Baby Forumeur‚
Posté(e)

Salue la communauté ;

 

Je me suis lancé dans la programmation en autodidacte il y a peu.

Actuellement, je travaille sur un projet qui consiste à effectuer une calculatrice d'âge. Mon modèle fonctionne déjà plutôt bien. Mais cependant, j'aimerais faire des ajustements afin de le finaliser.

J'ai en effet vu ailleurs sur le web des calculatrices du même genre tels que celui-ci là (https://calendriers.date/calcul-age/), qui donnent des résultats plus ou moins différents du mien. Après quelques réflexions, j'ai conclu que ceux-ci prennent en compte la différence du nombre de jours entre les mois ; chose que mon calculateur ne fait pas.

Ma question est donc la suivante : comment faire cette différence de jour entre les mois ? Et ce, de façon optimale.

Lien à poster
Partager sur d’autres sites

7 réponses à cette question

  • 0

Aide programmation Java (débutant).


elkaporal94

Messages recommandés

Membre, Explorateur de Nuages, 47ans Posté(e)
Pheldwyn Membre 25 241 messages
47ans‚ Explorateur de Nuages,
Posté(e)
Le 03/11/2021 à 23:02, elkaporal94 a dit :

Je me suis lancé dans la programmation en autodidacte il y a peu.

Java ou JavaScript ? 

Le 03/11/2021 à 23:02, elkaporal94 a dit :

Après quelques réflexions, j'ai conclu que ceux-ci prennent en compte la différence du nombre de jours entre les mois ; chose que mon calculateur ne fait pas.

Ah bah oui, c'est mieux de prendre en compte le nombre de jours dans le mois.... 

Enfin, je ne sais pas comment tu procèdes. 

Le plus simple est de se baser sur des différences en timestamp (secondes ou millisecondes) : en JavaScript tu peux soustraire directement un objet date à un autre et obtenir une différence en nombre de secondes (tu as aussi la solution de convertir d'abord chaque date en millisecondes, mais attention : les dates avant 1970 pourront avoir un timestamp négatif. Le mieux est de se baser sur le langage s'il sait faire directement la différence entre deux dates).

A partir du moment où tu as ton nombre de secondes (ou millisecondes), il suffit de te baser sur ce nombre et faire des divisions entières pour avoir précisément le nombre de jours, heures, minutes, semaines écoulées (je suppose que c'est ce que tu as fait). Mais effectivement, tu ne peux pas procéder aussi facilement pour le nombre de mois ou d'années.

Pour le nombre d'années, il te suffirait de diviser par 365 ton nombre de jours. Sauf que, effectivement, on se heurte à un premier soucis : les années bissextiles à 366 jours, la règle étant que les années bissextiles interviennent toutes les années divisibles par 4, mais pas par 100 : 2000 n'était pas bissextile par exemple  (bon, le risque est de compter au maximum une année en trop à quelques jours près).

Mais pour le coup tu peux repasser simplement par l'année de tes dates (comme cela plus de soucis de nombre de jours suivant les années) : tu soustrais les deux années, et tu modifies de 1 suivant que ton jour est antérieur ou inférieur dans l'année (tu compares le mois et le jour dans le mois).

Pour avoir le nombre de mois précis, ça va être la même idée : tu sais que ce nombre de mois (qu'ils fassent 28, 29, 30 ou 31 jours) sera 12 x le nombre d'années entièrement écoulées. Donc la différence des années fois 12.

Mais ça, c'est pour la différence si les 2 dates étaient au 1er janvier : tu dois donc ajouter le  nombre de mois écoulés  dans ton année actuelle, et retirer le nombre de mois écoulés dans l'année de naissance. Enfin, tu dois ajuster de -1 suivant le jour dans le mois entre les deux dates.

 

Il y a peut être plus rapide (même si tout mon message tient en quelques lignes de code), ou une fonction native qui fait déjà cela très bien ( je ne suis pas expert en JavaScript ;)).

En espérant que cela a pu t'aider.

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Membre, 57ans Posté(e)
SpookyTheFirst Membre 4 035 messages
Maitre des forums‚ 57ans‚
Posté(e)
Le 04/11/2021 à 05:53, Pheldwyn a dit :

 

Mais ça, c'est pour la différence si les 2 dates étaient au 1er janvier : tu dois donc ajouter le  nombre de mois écoulés  dans ton année actuelle, et retirer le nombre de mois écoulés dans l'année de naissance. Enfin, tu dois ajuster de -1 suivant le jour dans le mois entre les deux dates.

 

Je crois que je créerais un tableau sur 100 ans D[y][m][d] qui donne le nombre de jours depuis le début de l’année à la date y/m/d. Ca manque d’élégance mais je suis un bourrin par nature…:D

Lien à poster
Partager sur d’autres sites

Membre, 72ans Posté(e)
Frank_N Membre 5 488 messages
Maitre des forums‚ 72ans‚
Posté(e)

Si votre langage ne vous permet pas de faire le calcul directement, vous devrez utiliser le calendrier pour faire votre calcul. Le hic, ce sont les années bissextiles en sachant que pour qu'une année soit bissextile il faut qu'elle soit divisible par 4 mais pas par 100. 1900 par exemple n'était pas bissextile. Une exception à la règle, si l'année est divisible par 400, elle est bissextile. C'était le cas pour l'année 2000. J'avais fait un truc du genre avec Clipper, il y a plus de trente ans, à cette époque il n'y avait pas de fonctions de manipulation de dates dans les langages.

Lien à poster
Partager sur d’autres sites

Administrateur, Clyde Barrow, 42ans Posté(e)
Caez Administrateur 23 462 messages
42ans‚ Clyde Barrow,
Posté(e)

Ce n'est pas de la triche, autant utiliser les fonctions natives :D

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×