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

时间:2012-01-13 08:21:35

标签: delphi datetime

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

在伪代码中:

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

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

2 个答案:

答案 0 :(得分:13)

此功能是您所需要的:

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;

答案 1 :(得分:4)

这可以使用简单的数学运算来完成。

获取DayOfTheWeek并将DayOf除以7。