Code:OdejmijLMD: Różnice pomiędzy wersjami

Z Motława
 
(Nie pokazano 12 wersji utworzonych przez 2 użytkowników)
Linia 1: Linia 1:
 
{{FunkcjaDesc
 
{{FunkcjaDesc
 
|nazwa=OdejmijLMD
 
|nazwa=OdejmijLMD
|opis=
+
|opis= Funkcja obliczająca rożnicę pomiędzy dwiema datami / wymiarami czasu
 
|wejscie=OdRoku, OdMiesiaca, OdDnia, DoRoku, DoMiesiaca, DoDnia - liczby, aCzyDaty - Boolean
 
|wejscie=OdRoku, OdMiesiaca, OdDnia, DoRoku, DoMiesiaca, DoDnia - liczby, aCzyDaty - Boolean
|wyjscie= Record [[Code:TLMD|TLMD]]
+
|wyjscie= [[rekord]] typu [[Code:TLMD|TLMD]]
 
}}
 
}}
 +
{{PracaWre}}
 +
 +
 +
Parametry wejściowe:
 +
 +
aCzyDaty - determinuje interpretację pozostałych argumentów, dla których funkcja ma wyliczyć różnicę między nimi:
 +
  True -  argumenty są dwiema datami
 +
  False - argumenty są dwiema sumami lat, miesięcy, dni
 +
OdRoku, OdMiesiaca, OdDnia - data początkowa / wymiar czasu, która będzie odejmowany
 +
 +
DoRoku, DoMiesiaca, DoDnia - data końcowa / wymiar czasu, który będzie zmniejszany
 +
 +
 +
Parametry wyjściowe:
 +
ilość lat, miesięcy, dni będąca różnicą pomiędzy argumentami wejściowymi
  
 
== techniczne ==
 
== techniczne ==
<code>
+
<pre>
function OdejmijLMD(OdRok, OdMc, OdDzien, DoRok, DoMc, DoDzien : Word; aCzyDaty: Boolean = True) : TLMD;
+
function OdejmijLMD(OdRok, OdMc, OdDzien, DoRok, DoMc, DoDzien : Word; aCzyDaty: Boolean = True) : TLMD;
begin
+
begin
 
   // dni
 
   // dni
 
   if DoDzien + 1 < OdDzien then
 
   if DoDzien + 1 < OdDzien then
Linia 18: Linia 33:
 
       Dec(DoRok);
 
       Dec(DoRok);
 
     end;
 
     end;
 +
    // to powinno być chyba tylko gdy aCzyDaty = True
 
     Inc(DoDzien, DaysInAMonth(DoRok, DoMc-1));
 
     Inc(DoDzien, DaysInAMonth(DoRok, DoMc-1));
 +
    // j.w. gdy  aCzyDaty = False
 +
    // Inc(DoDzien, 30);
 
     Dec(DoMc);
 
     Dec(DoMc);
 
   end;
 
   end;
Linia 27: Linia 45:
 
   { obsluga sytuacji gdy otrzymalismy tyle dni ile ma miesiac - ma to miejsce
 
   { obsluga sytuacji gdy otrzymalismy tyle dni ile ma miesiac - ma to miejsce
 
     gdy wprowadzimy okres od 1go do ost. dnia miesiaca}
 
     gdy wprowadzimy okres od 1go do ost. dnia miesiaca}
 +
  // to powinno być chyba tylko gdy aCzyDaty = True
 
   if ((DoMc = OdMc) OR (OdDzien = 1)) AND (Result.Dni = DaysInAMonth(DoRok, DoMc)) then
 
   if ((DoMc = OdMc) OR (OdDzien = 1)) AND (Result.Dni = DaysInAMonth(DoRok, DoMc)) then
 
   begin
 
   begin
Linia 50: Linia 69:
 
   end;
 
   end;
 
end;
 
end;
</code>
+
</pre>

Aktualna wersja na dzień 08:36, 18 gru 2009

Function-icon.jpg Funkcja:
OdejmijLMD
opis skrócony: Funkcja obliczająca rożnicę pomiędzy dwiema datami / wymiarami czasu
parametry wejściowe: OdRoku, OdMiesiaca, OdDnia, DoRoku, DoMiesiaca, DoDnia - liczby, aCzyDaty - Boolean
parametry wyjściowe: rekord typu TLMD
Inprogress.png
Ten artykuł jest w trakcie tworzenia, nie wszystkie odnośniki mogą działać poprawnie lub być rozwinięte
Możesz nam pomóc przy rozbudowie dokumentacji systemu - zobacz jak możesz tego dokonać



Parametry wejściowe:

aCzyDaty - determinuje interpretację pozostałych argumentów, dla których funkcja ma wyliczyć różnicę między nimi:

 True -  argumenty są dwiema datami
 False - argumenty są dwiema sumami lat, miesięcy, dni

OdRoku, OdMiesiaca, OdDnia - data początkowa / wymiar czasu, która będzie odejmowany

DoRoku, DoMiesiaca, DoDnia - data końcowa / wymiar czasu, który będzie zmniejszany


Parametry wyjściowe: ilość lat, miesięcy, dni będąca różnicą pomiędzy argumentami wejściowymi

techniczne

 function OdejmijLMD(OdRok, OdMc, OdDzien, DoRok, DoMc, DoDzien : Word; aCzyDaty: Boolean = True) : TLMD;
 begin
  // dni
  if DoDzien + 1 < OdDzien then
  begin
    if DoMc = 1 then
    begin
      Inc(DoMc, 12);
      Dec(DoRok);
    end;
     // to powinno być chyba tylko gdy aCzyDaty = True 
    Inc(DoDzien, DaysInAMonth(DoRok, DoMc-1));
    // j.w. gdy  aCzyDaty = False
    // Inc(DoDzien, 30);
    Dec(DoMc);
  end;
  Result.Dni := DoDzien - OdDzien;// + 1;
  if aCzyDaty then
    Inc(Result.Dni, 1);

  { obsluga sytuacji gdy otrzymalismy tyle dni ile ma miesiac - ma to miejsce
    gdy wprowadzimy okres od 1go do ost. dnia miesiaca}
  // to powinno być chyba tylko gdy aCzyDaty = True
  if ((DoMc = OdMc) OR (OdDzien = 1)) AND (Result.Dni = DaysInAMonth(DoRok, DoMc)) then
  begin
    Result.Dni := 0;
    Inc(DoMc);
  end;

  // miesiace
  if DoMc < OdMc then
  begin
    Inc(DoMc,12);
    Dec(DoRok);
  end;
  Result.Mies := DoMc - OdMc;

  // lata
  Result.Lata := DoRok - OdRok;
  if Result.Lata < 0 then
  begin
    Result.Dni := 0;
    Result.Mies := 0;
    Result.Lata := 0;
  end;
end;