cs_fouroulou
Messages postés31Date d'inscriptionjeudi 31 mars 2005StatutMembreDernière intervention 7 avril 2008
-
21 mai 2005 à 15:00
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 2021
-
22 mai 2005 à 22:11
Bonjour tout le monde,
Je voudrais calculer le nombre de jours entre deux dates en eliminant les dimanche, puis récuperer le résultat
dans un Tedit.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 21 mai 2005 à 16:58
Bonjour
Programmes-tu pour le plaisir ?
Dans ce cas, je te donne quelques pistes :
En Delphi, la date est une donnée de type TDate.
Pour convertir un String de format jj/mm/yy en Date nombre (réel) il faut utiliser la fonction StrToDate.
Cela devrait te permettre de calculer la différence entre 2 dates.
Il y a un dimanche pour 7 jours...
Connais-tu l'opérateur Div ? Il te permet d'effectuer une division sur
deux entiers, en négligeant donc les chiffres après la virgule.
Oui, mais sur deux entiers, ça va pas le faire avec deux réels ?
Heureusement, il existe la fonction Trunc...
Si ça te prend trop la tête ou que tu es trop débutant, ou si tu ne
pratiques pas pour le plaisir, ou si tu es pressé, j'ai une petite
fonction toute chaude que je viens de mettre au point suite à ta
question. Moi, ça m'amuse...
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 21 mai 2005 à 22:04
uses dateUtils;
procedure TForm1.Button1Click(Sender: TObject);
var
d1, d2: TDateTime;
Days, Sundays: integer;
begin
d1 := StrTodate('01/01/2005');
d2 := Now;
Days := DaysBetween(d2, d1);
Sundays := Days div 7;
ShowMessageFmt('%d jours dont %d dimanche', [Days, Sundays]);
end;
<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 22 mai 2005 à 16:58
Salut les gars !
Je pense qu'on a faux tous les trois !
Kenavo >
il y a un bug si, Days étant inférieur à 7, tu calcules de lundi à
lundi, de mardi à mardi, etc... par exemple du 16 mai au 23 mai (7
jours dont 2 dimanches !)
Delphiprog >
J'avais fait une fonction similaire à la tienne, et n'avais pas tenu
compte du chevauchement d'un dimanche si Days était inférieur à 7.
Heureusement que Kenavo nous a mis la puce à l'oreille.
Il vaut mieux dans tous les cas, pour simplifier le problème (et rester
logique), ne pas admettre un dimanche comme date de départ ou d'arrivée.
J'ai donc un peu cogité (faut bien occuper ses Sundays *) et ça donne ça sous forme de fonction :
function GetDifferenceDatesDaysAndSundays(d1, d2: TDate): String;
var
Days, Sundays, DayOfWeek1: Integer;
begin
if (DayOfWeek(d1) 1) or (DayOfWeek(d2) 1) then
ShowMessage('Les dimanches ne sont pas pris en compte')
else if D1 > D2 then
ShowMessage('La première date entrée doit être antérieure à la seconde')
else
begin
Days := DaysBetween(d2, d1);
//Days := Trunc(d2 - d1); // pour les pauvres Delphi 4...
Sundays := Days div 7;
DayOfWeek1 := DayOfWeek(d1);
if (Days < 7) then
if (DayOfWeek1 xor 7 < Days) then
inc(Sundays);
Result := Format('%d jour(s) dont %d dimanche(s)', [Days, Sundays]);
end;
end;
J'ai pas mal testé, il semblerait qu'il n'y ait pas de bug...
Bonne prog'
japee
* j'aurais plus envie de m'en rajouter que de les décompter, lol
cs_Kenavo
Messages postés702Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention 1 octobre 20095 22 mai 2005 à 20:36
Mon bon Japee,
Je ne trouve pas ce bug dont tu me colles la paternité !
Si je compte de lundi à lundi,
Sundays :<gras>Days div 7; // Sundays</gras> 1 (Days = 7) Reste :Days mod 7; // Reste 0 Jour1 :DayOfTheWeek(d1); // Jour1 1 (Lundi)
if (Jour1 + Reste) > DaySunday then // Jour1 + reste = 1 inférieur à 7 (DaySunday)
inc(
Sundays);
// pas d'incrémentation : résultat = 1 dimanche
N'aurais-tu point été abusé par la ressemblance ô combien troublante
entre le fonctions DayOfWeek et DayOfTheWeek (celle-ci faisant
partie de l'unité DateUtils , dont les pauvres Delphiquatrenautes ne peuvent point jouir !)
si :
if (DayOfWeek(Now) = 1) then
ShowMessage('C''est aujourd''hui Dimanche, Ô ma jolie Maman !') ;
ne pose pas de problème,
if (DayOfTheWeek(Now) = 1) then
ShowMessage('C''est lundi, c''est raviolis !') ;
n'en pose pas plus !
Comme le dit l'aide (Delkphi 7) Pour DayOfWeek :
Remarque : DayOfWeek n'est pas conforme à la norme ISO 8601
(dans laquelle lundi est considéré comme le premier jour de la
semaine). Pour obtenir une version conforme ISO 8601, utilisez la
fonction DayOfTheWeek
.
Pour infos, sont déclarées ainsi et dans DateUtils les constantes de jour de la semaine :
DayMonday = 1;
DayTuesday = 2;
DayWednesday = 3;
DayThursday = 4;
DayFriday = 5;
DaySaturday = 6;
DaySunday = 7;
Soit :
DayOfWeek(Date) :=
(DayOfTheWeek(Date) mod 7) + 1;
Et je confirme ma préférence première pour > tout court !
japee
Messages postés1727Date d'inscriptionvendredi 27 décembre 2002StatutModérateurDernière intervention 6 novembre 20218 22 mai 2005 à 22:11
Mon bon Kenavo,
Si, tu as raison, j'ai été honteusement abusé par la ressemblance des 2 fonctions.
Ne disposant effectivement pas de DayOfTheWeek dans D4, j'en ai
étourdiment conclu que tu avais fait une erreur d'inattention (c'est
tellement facile de mettre sur le dos des autres...) et j'ai
effectivement modifié ton code dans ce sens.
Mea culpa.
Je suis d'autant plus confus qu'aucun de mes essais ne fonctionne
correctement. Et je n'ai pas eu le temps d'approfondir la chose.
Et chez moi, lundi, ça va pas être ravioli, mais chili (con carne, mais
ça rime plus), et peut-être bien mardi et mercredi aussi, vu la
quantité (g)astronomique que j'ai préparée...
Bonne fin de dimanche à tous, faut pas mollir, et bonne prog'