Delphi 每月第一[星期一],每月第二[星期四]等

Delphi 每月第一[星期一],每月第二[星期四]等,delphi,datetime,Delphi,Datetime,使用Delphi,我需要一个函数来计算当前日期,并查看它是否是,例如,一个月的第三个星期日,等等 在伪代码中: function IsFirst(const CurrentDateTime: TDateTime; const Day: Word): Boolean; /// Day can be 1-7 (monday to sunday) begin Result:= ?? end; 需要另一个函数来计算一个月的第二、第三、第四和最后一个月。DateUtils似乎没有这样的东西。有什么想

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

在伪代码中:

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

需要另一个函数来计算一个月的第二、第三、第四和最后一个月。DateUtils似乎没有这样的东西。有什么想法吗?

这可以用简单的数学来完成


获取
dayofweek
并将
DayOf
除以七。

此函数就是您需要的:

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;

到目前为止,您尝试了什么?您的函数没有结果类型,您的意图从代码或问题的文本中不清楚。是的,他的意思可能是
mod
。我的意思是
DayOf
,它应该给出与
dayofmon
相同的结果,我应该把它分成两句话。关键是你可以用简单的数学来做。大卫的答案很好。@DavidHeffernan-我不是指答案,只是“除以”部分。看到
DateTime
Perl模块的内部结构后,我怯懦地拒绝编写任何与日期计算相关的代码。@JensMühlenhoff好的,我现在明白了。