Здесь включены 2 вспомогательные функции, необходимые для работы вашей
функции. Одна проверяет високосный год, другая возвращает число дней месяца (с
проверкой високосного года), третья, ту, что вы хотели, возвращает текущую
неделю года.
|
|
{***************************************************************************} function
kcIsLeapYear( nYear: Integer ): Boolean; begin
Result := (nYear mod 4 = 0) and ((nYear mod 100
<> 0) or (nYear mod 400 = 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];
if (nMonth = 2) and
kcIsLeapYear(nYear) then Inc(Result); end;
{***************************************************************************} function
kcWeekOfYear( dDate: TDateTime ): Integer; var
X, nDayCount: Integer;
nMonth, nDay, nYear: Word; begin
nDayCount := 0;
deCodeDate( dDate, nYear, nMonth, nDay );
For X := 1 to ( nMonth -
1 ) do
nDayCount := nDayCount + kcMonthDays( X, nYear );
nDayCount := nDayCount + nDay;
Result := ( ( nDayCount div 7 ) +
1 ); end; | |