CALCUL DE L'ÉCART ENTRE 2 DATES, RESULTAT SOUS FORME JJ MM AA
florenth
-
7 mai 2007 à 20:30
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 2009
-
29 déc. 2008 à 12:57
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
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és33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 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és460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 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és33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 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és460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 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
jjnouiphp
Messages postés33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 29 déc. 2008 à 01:35
Bonjour à tous
@CINCAP, Merci de me signaler ce qui semble un bug, mais en cherchant une solution je me suis posé une question :
à date égale dans deux années doit-on intégrer la notion de jours supplémentaires pour les années bissextiles ?
Exemple: je suis né le 1/3/2000, nous sommes le 1/12/2008, je suis âgé de :
- 8 ans, 9 mois et 1 jour
- 8 ans, 9 mois et 1 jours + 2 jours pour les années bissextiles ?
de même en limitant les dates à une année non bissextile :
l'écart entre le 1/3/2005 et le 1/4/2005 qui est de 1 mois et un jour (soit 31 jours)
l'écart entre le 1/4/2005 et le 1/5/2005 qui est aussi de 1 mois et 1 jour (soit 30 jours)
En fait je pense que lorsque l'on donne l'écart entre 2 dates en nombre d'années, de mois et de jour on ne tient pas compte des années bissextiles et qu'il en est tout autrement si l'on compte en jours.
Bien entendu si quelqu'un à la réponse je suis preneur !
à bientôt et bonne fin d'année
cincap
Messages postés460Date d'inscriptiondimanche 5 décembre 2004StatutMembreDernière intervention 6 avril 20092 27 déc. 2008 à 16:29
Bonjour à toutes et à tous,
@ jjnouiphp, Ta fonction présente aussi un bug, en effet si on reprend le calcul entre le 29/02/2004 et 01/03/2005 on obtient 1 an et 1 jour mais si on indique le 28/02/2004 et 01/03/2005 on a encore 1 an et 1 jour ce qui n'est pas correct par contre si on indique le 27/02/2004 et 01/03/2005 on obtient 1 an et 2 jours.
Comme quoi .....
@+,
Cincap
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 8 mai 2007 à 21:48
C'était quoi ta direction initiale, Flo ? (je suis un gros curieux...)
Ce qui est sûr, c'est que les chemins qui mènent chacun à la programmation, et à Delphi en particulier, sont certainement étonnants, sauf sans doute pour ceux qui sont génétiquement prédestinés (j'ai pas osé dire programmés), lol...
Sinon, la super classe gérant les divers calendriers, solaires, lunaires, et les différents formats de date, c'est une oeuvre considérable. J'y songe le matin en me rasant, mais pour l'instant, je n'ai pas le loisir de m'y consacrer.
En effet, quelle perspicacité japee, j'avais (décidemment) lu trop vite ^^.
Sinon, pour revenir à cette histoire de dates, en fait, ce qu'il faudrait faire, c'est une sorte de classe comme l'a fait f0xi pour le TColor et qui permet de renvoyer une date sous ses différentes représentations dans les calendriers.
Exemple: Tu rentres une date grégorienne et tu demande son équivalent julien.
Et puis, ça enlève le problème des incohérences de calendriers (comme cette fameuse nuit de 10 jours) puisqu'alors, il n'y aurais pas d'équivalent grégorien de certaines dates juliennes (celles qui datent d'avant sa création).
Et si en plus, quelqu'un a la bonne idée de lui faire prendre en charge les différents formats informatiques des dates (format depuis le 01/01/0001, format depuis le début de la période Unix, ...) ça résoudrait pas mal de problèmes.
Quand je pense que certains se sont mis au Delphi pour *généalogiser*... lool ;-)
A+
Flo
PS: tous les amateurs ont leur propre raison de s'être mis au Delphi. Moi aussi je me suis un peu (beaucoup !) égaré de ma direction initiale...
jjnouiphp
Messages postés33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 8 mai 2007 à 20:47
Tout est bien qui finit bien
A une autre fois
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 8 mai 2007 à 19:59
@Florenth : attention de ne pas confondre "méprise" et "mépris" :
Il n'est pas question de mépriser qui que ce soit dans cet échange ^^
Mais je crois qu'on s'est tous bien compris.
Tu as raison, j'essaierai de mieux commenter mes sources, surtout pour ces histoires de date, ça prend vite la tête.
Quand à la fonction entre le 5/10/1582 et les 15/10/1582, tu ne crois pas si bien dire. Il serait trop facile de lui faire renvoyer 0 (zéro).
Les paramètres qui entrent en jeu sont affaire d'érudits, la mise en oeuvre du calendrier grégorien ayant différé selon les pays (la "révolution d'octobre" russe eut lieu au mois de novembre, pour situer...).
@jjnouiphp : heu... je retire "embrouillamini" ;-)
OK, je comprends mieux le chmilblic ...
"la méprise de Florenth" : s'il y en a un qui devrait mépriser quelqu'un, c'est certainement pas moi, mais japee.
De toutes façons, on n'empêche pas de poster plusieurs sources sur le même sujet, c'est juste que ta source me semblait quand même assez "copiée", c'est tout.
Maintenant, s'il s'agit d'une erreur de manipulation de ta part, alors tant mieux, tout est réglé.
@japee: en relisant le commentaire de jjnouiphp, j'ai vu cela :
"ne pouvant non plus m'appuyer sur les commentaires absents du code, je n'ai pu proposer de corrections"
Eh oui, japee, tu ne commentes pas assez ton code !!! lol
En tout cas, je vous souhaite bonne chance à tous les deux, car les dates, c'est vraiment pas facile (ya longtemps que j'ai arreté ce truc moi).
Le jour où ta fonction renverra 1 jour pour la différence entre le 5/10/1582 et le 15/10/1582, on te déclarera surhomme des dates !! ^^
++
jjnouiphp
Messages postés33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 8 mai 2007 à 17:19
Ca y est !!
Super désolé, je comprends la méprise de Florenth, mille excuses.
Je me suis trompé au moment du post et c'est par erreur que j'ai posté la version de test avec la partie de code appartenant à Japee.
La version que je devais diffuser n'est pas celle-là bien sûr.
Merci Japee de ta réponse plus cordiale, "l'embrouillamini" m'avais un peu chagriné ;)
Je vais donc refaire le post
A plus et bon coding
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 8 mai 2007 à 16:37
Salut jjnouiphp.
Non, personne ne dit que c'est le même travail.
Qu'il n'y ait pas de malentendu à ce sujet.
Mais pourquoi utiliser ma fonction GetYMDBetween de cette manière ?
Elle n'est pas conçue pour ça...
Il aurait suffi (ligne 193 de ton code) de faire :
Par contre, il semblerait que ma fonction comporte un bug...
Il y a apparemment une erreur de logique.
Merci de l'avoir remarqué.
A plus.
jjnouiphp
Messages postés33Date d'inscriptionlundi 19 avril 2004StatutMembreDernière intervention21 janvier 20201 8 mai 2007 à 15:14
Pour Florenth et japee :
Je suis désolé si vous pensez que j'ai 'pompé' le travail d'un autre. Je n'en vois pas l'intérêt. J'ai écris les quelques lignes car je n'avais pas trouvé (d'accord j'avais mal cherché) une routine de ce genre; c'est seulement au moment de poster que j'ai vu qu'il y avait un classement par rubrique et qu'il existait une rubrique consacrées aux dates et heures.
C'est là que j'ai découvert le travail de Japee, j'ai alors pris le temps de monter "vite fait" un test pour voir si ce que j'avais fait ne venait pas en doublon.
En testant en parallèle les 2 méthodes j'ai découvert que pour la routine de Japee donne un écart d'un an entre le 29 fevrier 2004 et le 1er mars 2005, pour moi il s'est passé un an et un jour.
Plutôt que de me lancer dans une critique qui aurait pu être mal comprise, ne pouvant non plus m'appuyer sur les commentaires absents du code, je n'ai pu proposer de corrections.
A part le fait que j'ai utilisé deux DateTimePicker et un bouton (comment faire autrement d'ailleurs) je ne vois pas de similitudes.
Si vous le souhaitez je peux poster une version utilisant les 2 méthodes pour que vous puissiez comparer les résultats.
On dirait bien qu'une des fonction utilisée dans Unit1.pas est issue du travail de japee (dis le moi si je me trompe). Ce serait bien de citer les véritables auteurs...
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
29 déc. 2008 à 01:35
@CINCAP, Merci de me signaler ce qui semble un bug, mais en cherchant une solution je me suis posé une question :
à date égale dans deux années doit-on intégrer la notion de jours supplémentaires pour les années bissextiles ?
Exemple: je suis né le 1/3/2000, nous sommes le 1/12/2008, je suis âgé de :
- 8 ans, 9 mois et 1 jour
- 8 ans, 9 mois et 1 jours + 2 jours pour les années bissextiles ?
de même en limitant les dates à une année non bissextile :
l'écart entre le 1/3/2005 et le 1/4/2005 qui est de 1 mois et un jour (soit 31 jours)
l'écart entre le 1/4/2005 et le 1/5/2005 qui est aussi de 1 mois et 1 jour (soit 30 jours)
En fait je pense que lorsque l'on donne l'écart entre 2 dates en nombre d'années, de mois et de jour on ne tient pas compte des années bissextiles et qu'il en est tout autrement si l'on compte en jours.
Bien entendu si quelqu'un à la réponse je suis preneur !
à bientôt et bonne fin d'année
27 déc. 2008 à 16:29
@ jjnouiphp, Ta fonction présente aussi un bug, en effet si on reprend le calcul entre le 29/02/2004 et 01/03/2005 on obtient 1 an et 1 jour mais si on indique le 28/02/2004 et 01/03/2005 on a encore 1 an et 1 jour ce qui n'est pas correct par contre si on indique le 27/02/2004 et 01/03/2005 on obtient 1 an et 2 jours.
Comme quoi .....
@+,
Cincap
8 mai 2007 à 21:48
Ce qui est sûr, c'est que les chemins qui mènent chacun à la programmation, et à Delphi en particulier, sont certainement étonnants, sauf sans doute pour ceux qui sont génétiquement prédestinés (j'ai pas osé dire programmés), lol...
Sinon, la super classe gérant les divers calendriers, solaires, lunaires, et les différents formats de date, c'est une oeuvre considérable. J'y songe le matin en me rasant, mais pour l'instant, je n'ai pas le loisir de m'y consacrer.
A +
8 mai 2007 à 20:55
Sinon, pour revenir à cette histoire de dates, en fait, ce qu'il faudrait faire, c'est une sorte de classe comme l'a fait f0xi pour le TColor et qui permet de renvoyer une date sous ses différentes représentations dans les calendriers.
Exemple: Tu rentres une date grégorienne et tu demande son équivalent julien.
Et puis, ça enlève le problème des incohérences de calendriers (comme cette fameuse nuit de 10 jours) puisqu'alors, il n'y aurais pas d'équivalent grégorien de certaines dates juliennes (celles qui datent d'avant sa création).
Et si en plus, quelqu'un a la bonne idée de lui faire prendre en charge les différents formats informatiques des dates (format depuis le 01/01/0001, format depuis le début de la période Unix, ...) ça résoudrait pas mal de problèmes.
Quand je pense que certains se sont mis au Delphi pour *généalogiser*... lool ;-)
A+
Flo
PS: tous les amateurs ont leur propre raison de s'être mis au Delphi. Moi aussi je me suis un peu (beaucoup !) égaré de ma direction initiale...
8 mai 2007 à 20:47
A une autre fois
8 mai 2007 à 19:59
Il n'est pas question de mépriser qui que ce soit dans cet échange ^^
Mais je crois qu'on s'est tous bien compris.
Tu as raison, j'essaierai de mieux commenter mes sources, surtout pour ces histoires de date, ça prend vite la tête.
Quand à la fonction entre le 5/10/1582 et les 15/10/1582, tu ne crois pas si bien dire. Il serait trop facile de lui faire renvoyer 0 (zéro).
Les paramètres qui entrent en jeu sont affaire d'érudits, la mise en oeuvre du calendrier grégorien ayant différé selon les pays (la "révolution d'octobre" russe eut lieu au mois de novembre, pour situer...).
@jjnouiphp : heu... je retire "embrouillamini" ;-)
8 mai 2007 à 19:12
"la méprise de Florenth" : s'il y en a un qui devrait mépriser quelqu'un, c'est certainement pas moi, mais japee.
De toutes façons, on n'empêche pas de poster plusieurs sources sur le même sujet, c'est juste que ta source me semblait quand même assez "copiée", c'est tout.
Maintenant, s'il s'agit d'une erreur de manipulation de ta part, alors tant mieux, tout est réglé.
@japee: en relisant le commentaire de jjnouiphp, j'ai vu cela :
"ne pouvant non plus m'appuyer sur les commentaires absents du code, je n'ai pu proposer de corrections"
Eh oui, japee, tu ne commentes pas assez ton code !!! lol
En tout cas, je vous souhaite bonne chance à tous les deux, car les dates, c'est vraiment pas facile (ya longtemps que j'ai arreté ce truc moi).
Le jour où ta fonction renverra 1 jour pour la différence entre le 5/10/1582 et le 15/10/1582, on te déclarera surhomme des dates !! ^^
++
8 mai 2007 à 17:19
Super désolé, je comprends la méprise de Florenth, mille excuses.
Je me suis trompé au moment du post et c'est par erreur que j'ai posté la version de test avec la partie de code appartenant à Japee.
La version que je devais diffuser n'est pas celle-là bien sûr.
Merci Japee de ta réponse plus cordiale, "l'embrouillamini" m'avais un peu chagriné ;)
Je vais donc refaire le post
A plus et bon coding
8 mai 2007 à 16:37
Non, personne ne dit que c'est le même travail.
Qu'il n'y ait pas de malentendu à ce sujet.
Mais pourquoi utiliser ma fonction GetYMDBetween de cette manière ?
Elle n'est pas conçue pour ça...
Il aurait suffi (ligne 193 de ton code) de faire :
signe := DateTimePicker1.Date <= DateTimePicker1.Date;
ou pourquoi ne pas créer une fonction :
function IsNotNegative(FromDate, ToDate: TDateTime): Boolean;
begin
Result := FromDate <= ToDate;
end;
appelée ainsi :
signe := IsNotNegative(DateTimePicker1.Date, DateTimePicker1.Date);
Par contre, il semblerait que ma fonction comporte un bug...
Il y a apparemment une erreur de logique.
Merci de l'avoir remarqué.
A plus.
8 mai 2007 à 15:14
Je suis désolé si vous pensez que j'ai 'pompé' le travail d'un autre. Je n'en vois pas l'intérêt. J'ai écris les quelques lignes car je n'avais pas trouvé (d'accord j'avais mal cherché) une routine de ce genre; c'est seulement au moment de poster que j'ai vu qu'il y avait un classement par rubrique et qu'il existait une rubrique consacrées aux dates et heures.
C'est là que j'ai découvert le travail de Japee, j'ai alors pris le temps de monter "vite fait" un test pour voir si ce que j'avais fait ne venait pas en doublon.
En testant en parallèle les 2 méthodes j'ai découvert que pour la routine de Japee donne un écart d'un an entre le 29 fevrier 2004 et le 1er mars 2005, pour moi il s'est passé un an et un jour.
Plutôt que de me lancer dans une critique qui aurait pu être mal comprise, ne pouvant non plus m'appuyer sur les commentaires absents du code, je n'ai pu proposer de corrections.
A part le fait que j'ai utilisé deux DateTimePicker et un bouton (comment faire autrement d'ailleurs) je ne vois pas de similitudes.
Si vous le souhaitez je peux poster une version utilisant les 2 méthodes pour que vous puissiez comparer les résultats.
Cordialement
jjnouiphp
7 mai 2007 à 20:30