本月的第一个[星期一],本月的第二个[星期四]等。德尔福
使用Delphi,我需要一个函数来评估当前日期,并查看它是否是例如本月的第三个星期天等。本月的第一个[星期一],本月的第二个[星期四]等。德尔福
伪代码:
function IsFirst(const CurrentDateTime: TDateTime; const Day: Word): Boolean;
/// Day can be 1-7 (monday to sunday)
begin
Result:= ??
end;
将需要另一个函数来计算二,三,四月份的最后和。 DateUtils似乎没有那样的东西。有任何想法吗?
此功能是你所需要的:
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;
这可以使用简单的数学来完成。
获取DayOfTheWeek
并将DayOf
除以7。
是的,他可能是指'mod'。 – 2012-01-13 13:22:17
我的意思是'DayOf'应该给出与'DayOfTheMonth'相同的结果,我应该把它分成两个句子。关键是你可以用简单的数学来做到这一点。戴维斯的回答很好。 – 2012-01-13 14:44:14
@DavidHeffernan - 我没有指出答案,只是“除以”部分。看到“DateTime”Perl模块的内部结构后,我怯懦地拒绝编写与日期计算相关的任何内容。 – 2012-01-13 15:23:49
你到目前为止尝试过什么? – 2012-01-13 08:27:52
您的功能没有结果类型,您的意图不清楚从代码或您的问题的文本。 – 2012-01-13 09:02:20