Calcul de l'écart entre 2 dates, resultat sous forme jj mm aa

0/5 (16 avis)

Vue 21 138 fois - Téléchargée 2 507 fois

Description

Juste un tout petit code pour calculer l'écart entre 2 dates.

Une fonction : DeltaDatetoJJMMAA(const Date1, Date2 : TDate) : TJJMMAA
ou TJJMMAA est un record qui contient, vous l'aurez deviné
JJ, MM, AA : byte

Un petit programme de test (testé sous Delphi 6) avec 2 DateTimePicker, 1 bouton et un label pour afficher le résultat.

En espèrant dépanner comme j'ai pu l'être souvent sur ce site...

Conclusion :


Encore une routine de calcul de différence entre 2 dates; mais faîtes un test avec le 29/02/2004 et le 01/03/2005, à mon avis la réponse devrait être 1 an et 1 jour, ce qui n'est pas toujours le résultat....
Alors, à mon tour


Des bugs connus? S'ils étaient connus, je me serais dépêché de les corriger avant de poster.

J'ai testée la fonction avec Delphi 6 et je crois avoir lu que c'est à partir de cette version que l'unité DateUtils est fournie.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
29 déc. 2008 à 12:57
En faisant ceci, calcul en heure puis diviser par 24 pour trouver en jours.

Dtp1.Date, Dtp2.Date = TDateTimePicker

A tester

procedure TFTestDate.BCalculclick(Sender: TObject);
var
Date2, Date1 : TDate;
Diff : Double;
begin
Date1:=Dtp1.Date;
Date2:=dtp2.Date;
Diff := HoursBetween(Date1,Date2) /24;
Edit1.text:=FloatToStr(Diff)+ ' Jours';
End;

pour la différence entre le 29/02/2004 et 01/03/2005 on trouve 366 jours donc 1 an et 1 jour ce qui est exact.

@+,

Cincap
jjnouiphp Messages postés 33 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 21 janvier 2020 1
29 déc. 2008 à 12:06
@Cincap
Heu! J'ai mal compté avec mes doigts, en effet c'est 2 mois et un jour qui séparent le 31 décembre 2003 du 1er mars 2004.
En ce qui concerne les méthodes pour arriver au bon résultat il faut d'abord se mettre d'accord sur ce qui est le bon résultat.
Donc, si tu le veux bien on considère que les exemples fournis plus haut sont corrects mis à part la bourde du 3 mois qui est bien en réalité 2 mois et 1 jour ?

à tout de suite ?
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
29 déc. 2008 à 11:16
@jjnouiphp,pour moi, entre le 31/12/2003 et 01/03/2004 il y a 2 mois et 1 jour et non 3 mois comme tu le supposes.

Il faudrait imaginer des variables pour l'année bisectile.

@+,

Cincap
jjnouiphp Messages postés 33 Date d'inscription lundi 19 avril 2004 Statut Membre Dernière intervention 21 janvier 2020 1
29 déc. 2008 à 11:01
Bonjour à tous

@CINCAP, merci de ta réponse rapide.
Si j'ai bien compris ton raisonnement (que je partagerai) il ne faut tenir compte que de l'année bissextile en cours
exemples:
entre le 28 février 2004 et le 1er mars 2004 il y a bien une journée (le 29)
entre le 28 février 2004 et le 1er mars 2005 il y a bien un an et un jour
entre le 28 février 2004 et le 1er mars 2006 il y a bien deux ans et un jour
et pour chaque 1er mars postérieur (même s'il y a des années bissextiles) on trouvera un intervalle de x années et un jour.

en suivant le raisonnement :
entre le 31 décembre 2003 et le 1er mars 2004 il y a bien 3 mois même si 2004 est bissextile ?

Pardon pour ce long texte mais si on veut faire avancer le"schmillblick" c'est nécessaire.

à bientôt
cincap Messages postés 460 Date d'inscription dimanche 5 décembre 2004 Statut Membre Dernière intervention 6 avril 2009 2
29 déc. 2008 à 09:32
Bonjour à toutes et à tous,

@jjnouiphp, bien compris, pour ma part, le calcul doit se faire au niveau de l'année bisectile (et non bissextiles).

Soit augmenter d'un jour le résultat.

Maintenant faudrait voir le calcul en heure = 8784,00167527667 Heures.

Cela vaut la peine de trouver je pense.

@+,

Cincap

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.