本月的第一个[星期一],本月的第二个[星期四]等,德尔福

Lob*_*uno 8 delphi datetime

使用Delphi,我需要一个函数来评估当前日期,看看它是否是,例如,当月的第三个星期日等.

在伪代码中:

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

计算本月的第二,第三,第四和最后一个时需要另一个功能.DateUtils似乎没有那样的东西.有任何想法吗?

Dav*_*nan 13

这个功能是你需要的:

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

第二次出现的等效函数是:

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

我相信你可以填写第三,第四和第五的细节.你可能更喜欢写一个像这样的通用函数:

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;
Run Code Online (Sandbox Code Playgroud)