2012-01-13 44 views
8

Sử dụng Delphi, tôi cần một hàm để đánh giá ngày hiện tại và xem liệu nó có, ví dụ, Chủ Nhật Thứ Ba của tháng, v.v. .Đầu tiên [Thứ Hai] của tháng, Thứ Hai [Thứ Năm] của tháng, v.v. Delphi

trong giả:

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

chức năng khác sẽ là cần thiết để tính toán thứ hai, thứ ba, Forth và cuối của tháng. DateUtils dường như không có gì giống như vậy. Bất kỳ ý tưởng?

+1

Và bạn đã thử những gì cho đến nay? –

+0

Chức năng của bạn không có loại kết quả, ý định của bạn không rõ ràng từ mã hoặc từ văn bản câu hỏi của bạn. –

Trả lời

13

Chức năng này là những gì bạn cần:

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

Chức năng tương đương cho sự xuất hiện thứ hai là:

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

tôi chắc chắn rằng bạn có thể điền các chi tiết cho thứ ba, thứ tư và thứ năm . Bạn có thể muốn viết một chức năng chung duy nhất như sau:

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

Điều này có thể được thực hiện bằng cách sử dụng toán học đơn giản.

Lấy DayOfTheWeek và chia DayOf cho bảy.

+0

Vâng, anh ấy có thể có nghĩa là 'mod'. –

+0

Tôi có nghĩa là 'DayOf' mà nên cho kết quả tương tự như' DayOfTheMonth', tôi nên đã tách ra thành hai câu. Vấn đề là bạn có thể làm điều đó bằng cách sử dụng toán học đơn giản. Câu trả lời của David là tốt. –

+0

@DavidHeffernan - Tôi không chỉ vào câu trả lời, chỉ là phần "chia nhỏ". Tôi hèn nhát từ chối mã bất cứ điều gì liên quan đến tính toán ngày sau khi nhìn thấy bên trong của các mô-đun Perl 'DateTime'. –

Các vấn đề liên quan