2012-01-13 82 views
8

使用Delphi,我需要一個函數來評估當前日期,並查看它是否是例如本月的第三個星期天等。本月的第一個[星期一],本月的第二個[星期四]等。德爾福

僞代碼:

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

將需要另一個函數來計算二,三,四月份的最後和。 DateUtils似乎沒有那樣的東西。有任何想法嗎?

+1

你到目前爲止嘗試過什麼? – 2012-01-13 08:27:52

+0

您的功能沒有結果類型,您的意圖不清楚從代碼或您的問題的文本。 – 2012-01-13 09:02:20

回答

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; 
4

這可以使用簡單的數學來完成。

獲取DayOfTheWeek並將DayOf除以7。

+0

是的,他可能是指'mod'。 – 2012-01-13 13:22:17

+0

我的意思是'DayOf'應該給出與'DayOfTheMonth'相同的結果,我應該把它分成兩個句子。關鍵是你可以用簡單的數學來做到這一點。戴維斯的回答很好。 – 2012-01-13 14:44:14

+0

@DavidHeffernan - 我沒有指出答案,只是「除以」部分。看到「DateTime」Perl模塊的內部結構後,我怯懦地拒絕編寫與日期計算相關的任何內容。 – 2012-01-13 15:23:49

相關問題