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.
29 déc. 2008 à 12:57
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
29 déc. 2008 à 12:06
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 ?
29 déc. 2008 à 11:16
Il faudrait imaginer des variables pour l'année bisectile.
@+,
Cincap
29 déc. 2008 à 11:01
@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
29 déc. 2008 à 09:32
@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.