Первый [понедельник] месяца, второй [четверг] месяца и т. Д. Delphi - PullRequest
8 голосов
/ 13 января 2012

Используя Delphi, мне нужна функция, чтобы оценить текущую дату и посмотреть, например, третье ли воскресенье месяца и т. Д.

В псевдокоде:

function IsFirst(const CurrentDateTime: TDateTime; const Day: Word): Boolean;
/// Day can be 1-7 (monday to sunday)
begin
  Result:= ??
end;

Другая функция потребуется для вычисления второго, третьего, четвертого и последнего месяца. У DateUtils вроде бы ничего такого нет. Есть идеи?

Ответы [ 2 ]

13 голосов
/ 13 января 2012

Эта функция - то, что вам нужно:

function IsFirst(const DateTime: TDateTime; const Day: Word): Boolean;
begin
  Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), 1, 7);
end;

Эквивалентная функция для второго случая:

function IsSecond(const DateTime: TDateTime; const Day: Word): Boolean;
begin
  Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), 8, 14);
end;

Я уверен, что вы можете заполнить детали для третьего,четвертый и пятый.Вы можете предпочесть написать одну общую функцию, например, такую:

function IsNth(const DateTime: TDateTime; const Day: Word; 
  const N: Integer): Boolean;
var
  FirstDayOfWeek, LastDayOfWeek: Integer;
begin
  LastDayOfWeek := N*7;
  FirstDayOfWeek = LastDayOfWeek-6;
  Result := (DayOfTheWeek(DateTime)=Day) and 
    InRange(DayOfTheMonth(DateTime), FirstDayOfWeek, LastDayOfWeek);
end;
4 голосов
/ 13 января 2012

Это можно сделать с помощью простой математики.

Получите DayOfTheWeek и разделите DayOf на семь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...