Probleme de date !!!

guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 avril 2006 - 25 janv. 2006 à 09:37
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 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;

4 réponses

Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
26 janv. 2006 à 14:46
Salut,
essaye comme ceci cette procedure calcule le nombre de jour entier entre deux date :

Procedure AllDaysBetweenProc(Out DaysCount: integer;
Const DFrom, DTo: TDateTime; Const ExcludeWE: boolean = false);
Var DMin, DMax : TDateTime; WS: integer;
Begin
DMin : = DateOf(Min(DFrom, DTo));
DMax := DateOf(Max(DFrom, DTo));
DaysCount := DaysBetween(DMin, DMax);
If ExcludeWe Then
Begin
WS : = WeeksBetween(DMin, DMax);
If WS > 0 Then
Dec(DaysCount, WS * 2);
End;
End;



@+
Cirec
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 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;


gb_resultat.Visible:=true;
lbl_resultat5.Caption := inttostr(i);
lbl_resultatwe.Caption := inttostr(j);
lbl_resultat7.Caption := inttostr(i+j);


end;
0
Cirec Messages postés 3833 Date d'inscription vendredi 23 juillet 2004 Statut Modérateur Dernière intervention 18 septembre 2022 50
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é

@+
Cirec
0
guigui265 Messages postés 113 Date d'inscription mercredi 29 novembre 2000 Statut Membre Dernière intervention 16 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!
@++
0
Rejoignez-nous