Советы по Delphi. Версия 1.4.3 от 1.1.2001 (Озеров) - страница 6

> 3: Label4.Caption:='Вторник';

> 4: Label4.Caption:='Среда';

> 5: Label4.Caption:='Четверг';

> 6: Label4.Caption:='Пятница';

> 7: Label4.Caption:='Суббота';

end

>Week:=(HowManyDays(year,month,day) div 7) +1;

> Label3.Caption:='Неделя No. '+IntToStr(Week);

>end;


>end.

Количество дней между двумя датами I

Delphi 1

ПЕРЕМЕННЫЕ:

>Year1, Month1, Day1,

>Year2, Month2, Day2,

>YearResult, MonthResult, DayResult: Word;

>TDay1, TDay2, DateDiff: TDateTime;

КОД:

>TDay1 := EncodeDate(Year1, Month1, Day1);

>TDay2 := EncodeDate(Year2, Month2, Day2);

>DateDiff := TDay2 – TDay1; {предположим, что TDay2 позднее, чем TDay1}

>DecodeDate(DateDiff, YearResult, MonthResult, DayResult);

DateDiff имеет тип LongInt (хотя и является объектом TDateTime), и содержит количество дней между датами.

Количество дней между двумя датами II

Delphi 1

Для DateDiff:

Вы смотрели на функцию DecodeDate? Это не точно именно то, что вам нужно, но на ее основе можно сделать вашу функцию именно с нужной вам функциональностью.

Для величины Present:

>function PresentValue(const cashflows : array of double;    { отсортированные транзакции, начальный индекс - cashflows[0] }

> n : integer; { количество транзакций в массиве }

> rate : double; { оценочный процент за истекший период }

> atbegin : boolean) : double; { true, если транзакция была в начале периода,false если в конце }

>var

> i: integer;

> factor: double;

>begin

> factor := (1 + rate / 100.0);

> result := 0;

for i := n - 1 downto 0 do result := (result + cashflows[n]) / factor;

if atbegin then result := result * factor;

>end;

Конвертирование даты

Delphi 1

>TheDateField.AsString := TheDateString;

>TheDateString := TheDateField.AsString;

это делает преобразование подобно DateToStr и StrToDate. Аналогично:

>TheDateField.AsDateTime := StrToDate(TheDateString);

>TheDateString := DateToStr(TheDateField.AsDateTime);

Число текущей недели

Delphi 1

Здесь включены 2 вспомогательные функции, необходимые для работы вашей функции. Одна проверяет високосный год, другая возвращает число дней месяца (с проверкой високосного года), третья, ту, что вы хотели, возвращает текущую неделю года.

>{***************************************************************************}

>function kcIsLeapYear(nYear: Integer): Boolean;

>begin

> Result := (nYear mod 4 = 0) and ((nYear mod 100 <> 0) or (nYear mod400 = 0));

>end;


>{***************************************************************************}

>function kcMonthDays(nMonth, nYear: Integer): Integer;

>const

> DaysPerMonth: array[1..12] of Integer = (31, 28, 31, 30, 31, 30, 31,31, 30, 31, 30, 31);

>begin

> Result := DaysPerMonth[nMonth];