Code:OdejmijLMD: Różnice pomiędzy wersjami
Z Motława
(→techniczne) |
|||
| (Nie pokazano 10 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= [[rekord]] typu [[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 == | ||
| 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 | ||
Aktualna wersja na dzień 08:36, 18 gru 2009
| |
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 | ||
| 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;