Показать сообщение отдельно
  #5  
Старый 15.01.2016, 20:00
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Страдалец, не совсем так.
Пусть сейчас понедельник, а событие должно произойти в четверг. Вот надо получить дату ближайшего четверга.
Итак. Что мы, как специалисты, делаем.
Мы знаем:
1. Текущую дату
2. День недели события.
Надо:
1. Узнать на какую дату после текущей приходится ближайший "чеверг".
Что используем:
1. Тип TDateTime, где в целой части находится кол-во дней после 1 янв 1900 (если не ошибаюсь) года (не важно, чему соотв. DateTime(0), важно, что там просто кол-во дней).
2. Функцию DayOfWeeek, которая возвращает норме дня недели, где понедельник=1 (есть еще одна, DayOfTheWeek, там первый день - воскресенье. ну если я ничего не попутал, лень в справку лезть).
Итого:
Код:
function GetNextDayOfWeekDate(ADay : Integer);
var
  Current : TDateTime;
  CurrentDay : Integer;
begin
  Current := Date;
  CurrentDay := DayOfWeek(Current);

  If CurrentDay = ADay // День недели совпадает
    Then Result := Current + 7 // или просто Current, если "сегодня" годится
    Else
      If CurrentDay > ADay
        Then Result := Current + (7 - (CurrentDay - ADay))
        Else Result := Current + (ADay - CurrentDay);
end;
Вроде так. Надо под дебагерром проверить на разных днях.
Ответить с цитированием