Ilość dni- bez świat i innych dni wolnych od pracy

0

Witam
Chciałbym obliczyć ilość dni między datami podanymi w dwóch komponentach typu datetimerpicker jednak zależy mi na tym żeby święta i inne dni wolne od pracy były pomijane przy obliczaniu ilości dni.
Chciałem to rozwiązać z użyciem zewnętrznego pliku w którym są podane konkretne daty świąt,czy też dni wolnych po dyżurach itp jednak moje próby zakończyły się porażką. Zależy mi na tym aby był zewnętrzny plik gdyż wtedy każdy inny użytkownik mógłby wprowadzać swoje daty dni wolnych od pracy.
Może ktoś z was robił już coś takiego lub podobnego i może podzielić się swoją wiedzą na ten temat.

0

Zaczynając od daty początkowej przechodząc pętla możesz sprawdzić jaki to dzień czyli np:

var
  D: TDate;
  I: Integer;
begin
  dzień_wolny:= 0;
  D:= data_początkowa;
  for I:= 0 to różnica_dni do
  begin
     if DayOfWeek(D) = 1 then Inc(dzień_wolny)  // 1 to niedziela, 2 poniedziałek itd
     else if D = dzień_z_listy_świąt then Inc(dzień_wolny);
     D:= D + 1;
  end;
end;

Dni świąteczne można by przechowywać w StringList. Wtedy do sprawdzenia czy dzień z pętli znajduje się na liście wystarczy zapisać
if StringList.IndexOf(DateToStr(D)) > -1 then Inc(DzieńWolny);

0

Do obliczania ilości dni między podanymi datami wykorzystuje poniższy kod (zaczerpnięty z forum). Kod ten przy obliczaniu ilości dni pomija soboty i niedziele jak w to wmontować podaną przez ciebie pętle????

procedure TForm1.Label25Click(Sender: TObject);
var dni, dni_wolne, reszta: Integer;
begin

dni := DaysBetween(DateTimePicker3.DateTime, DateTimePicker4.DateTime);
dni_wolne := (dni div 7) * 2;
reszta := dni mod 7;
dni_wolne := dni_wolne + Max(0, Min(reszta - (DayOfWeek(DateTimePicker4.DateTime) mod 7) + 1, 2));

label25.caption:=IntToStr(round(DateTimePicker4.date-DateTimePicker3.date-dni_wolne)+1);

end;

0

Ok dałem rade temat zamkniety

Dzieki za pomoc [browar]

1 użytkowników online, w tym zalogowanych: 0, gości: 1