guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 avril 2006
-
25 janv. 2006 à 09:37
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 avril 2006
-
27 janv. 2006 à 10:59
Salut a tous,
j'ai une appli qui permet de calculer entre 2 dates le nombre de jours entiers et le nombre de jours sans les week end. Mais je n'arrive pas a corriger les bug en rapport avec les week end, dans le calcul de ExcludeWe et dans le test if DFrom = DTo then
if (DayOfTheWeek(dfrom)=6)or(DayOfTheWeek(dfrom)=7) then.
Voici la procedur de calcul, en rouge, la ou je pense qu'il y a des problemes. Aidez moi a les résoudre,merci
procedure AllDaysBetweenProc(out DaysCount : integer;
const DFrom,DTo : TDateTime; const ExcludeWE : boolean = false);
var DMin,DMax : TDateTime; WS : integer;
begin
if DFrom = DTo then
if (DayOfTheWeek(dfrom)=6)or(DayOfTheWeek(dfrom)=7) then
begin
DaysCount:=0;
exit;
end
else
begin
DaysCount := 1;
exit;
end;
DMin := DateOf(Min(DFrom,DTo));
DMax := DateOf(Max(DFrom,DTo));
DaysCount := trunc(DaySpan(DMin,DMax))+1;
if ExcludeWe then
begin
WS := trunc(WeekSpan(DMin,DMax)*2);
if DaysCount < 7 then
Dec(WS,1);
if WS > 0 then
Dec(DaysCount,WS+1);
end;
end;
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 avril 2006 27 janv. 2006 à 09:02
Voici la version finale, bien plus simple, et aucun bug, elle est parfaite
procedure Tfrm_principal.bt_calculerClick(Sender: TObject);
var i : integer;
j : integer;
jour : string;
begin
i := 0;
j := 0;
date3.DateTime := date1.DateTime;
date4.DateTime := IncDay(date2.DateTime, 1);
if date1.DateTime>date2.DateTime then
begin
gb_resultat.Visible := false;
MessageDlg('La date de début doit être inférieure à la date de fin !',
mterror,[mbOk],0);
end
else
Repeat
jour := FormatDateTime('dddd',date3.DateTime);
label5.Caption := jour; if (jour 'samedi') OR (jour 'dimanche') Then
begin
j := j+1;
date3.DateTime := IncDay(date3.DateTime, 1);
end
else
begin
i := i+1;
date3.DateTime := IncDay(date3.DateTime, 1);
end;
Until CompareDate(date3.DateTime,date4.DateTime) = 0;
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 27 janv. 2006 à 10:33
salut,
as-tu au moins essayé celle que je t'ai proposé parce que pour être simple elle est simple et fonctionnelle alors que celle que tu proposes on ne peut même pas l'essayé puisqu'elle dépend de x composants n'oublie pas que les reponses donnée sur le forum peuvent servir à d'autre. Ta devise serait plutôt pouquoi faire simple quand on peut faire compliqué
guigui265
Messages postés113Date d'inscriptionmercredi 29 novembre 2000StatutMembreDernière intervention16 avril 2006 27 janv. 2006 à 10:59
Salut,
j'ai essayé ta solution, mais a chaque fois que j'utilisai une otre procédure, je n'obtenez pas le résultat voulu. Je ne comprenez d'ailleur pas pourquoi dans mon cas cela ne fonctionnai pas correctement.
La solution que j'ai donner marche parfaitement chez moi, meme si elle est plus longue, et je pense qu'elle peut encore etre optimisée, mais elle n'est pas plus compliquée!
@++