2012-01-13 2 views
8

Использование Delphi, мне нужна функция для оценки текущей даты и посмотреть, есть ли это, например, третье воскресенье месяца и т. Д. .Первый [понедельник] месяца, второй [четверг] месяца и т. Д. Delphi

в псевдокоде:

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

Другая функция будет необходима для расчета второго, третьего, Forth и последний месяца. Кажется, что DateUtils ничего подобного не имеет. Есть идеи?

+1

И что вы пробовали до сих пор? –

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

Это можно сделать с помощью простой математики.

Получите DayOfTheWeek и разделите DayOf на семь.

+0

Да, он, вероятно, означает «мод». –

+0

Я имел в виду 'DayOf', который должен дать тот же результат, что и' DayOfTheMonth', я должен был разделить это на два предложения. Дело в том, что вы можете сделать это с помощью простой математики. Ответ Давидса в порядке. –

+0

@DavidHeffernan - Я не указывал на ответ, просто часть «разделите». Я трусливо отказываюсь кодировать что-либо, связанное с расчетом даты, увидев внутренности модулей Perl 'DateTime'. –

Смежные вопросы