| 
| 
 | Вопрос # 144/ вопрос открыт / | 
 |  Есть начальная и конечная дата периода.Как написать оператор цыкла так, чтобы он начинался с
 начальной даты и перебырал каждый день до конечной даты? Тоисть, количество цыклов должно равняться количиству дней в указаном перыоде. При этом вкаждом цыкле нужно читать дату с которой он работает.
 
|  |   Вопрос задал: Игорь Середюк (статус: Посетитель)Вопрос отправлен: 26 октября 2006, 13:34
 Состояние вопроса: открыт, ответов: 4.
 |  Ответ #1. Отвечает эксперт: Помфюк Владимир Степанович Здравствуйте, Игорь Середюк!Дата предствляется типом DateTime, который есть не что иное как real, причем целая часть - дни, дробная - время. Таким образом взяв целую часть од начальной даты и от конечной Вы получите числа по которым можно организовать цикл, а внутри цикла преобразовав обратно получите дату каждого конкретного дня.
 Приложение:Переключить в обычный режим var StartDate,EndDate,Today:TDatetime; i:LongInt; y,m,d:Word;for i:=trunc(StartDate) to trunc(EndDate) doo begin Today:=i; DecodeDate(Today,y,m,d); ...........end
Ответ #2. Отвечает эксперт: min@y™ В модуле DateUtils.pas есть много интересных функций для работы с датами и временем. Для вычисления кол-ва дней между двумя датами (т.е. кол-во итераций цикла) используй функцию:
 function DaysBetween(const ANow, AThen: TDateTime): Integer;
 
 Для получения текущей даты юзай функцию Date().
 
|  | Ответ отправил: min@y™ (статус: Доктор наук)Время отправки: 27 октября 2006, 08:16
 Оценка за ответ: 4
 |  Ответ #3. Отвечает эксперт: Новаковский Юрий Аврамович Самое простое узнать номер юлианского дня для второй даты и вычесть из него номер юлианского дня для первой даты даты.Юлианские дни - число дней с полудня 1 января 4713 до н. э. по юлианскому календарю
 служат для расчета числа дней между двумя датами . Есть соответствующие формулы и таблицы, найти их можно в астрономическх календарях (см.приложение).Вычисляет верно, но без учета времени суток.
 Удачи Вам.
 Приложение:Переключить в обычный режим   jd := ( 1461 * ( y + 4800 + ( m - 14 ) / 12)) / 4 +( 367 * ( m - 2 - 12 * (( m - 14 ) / 12))) / 12 -3 * ((( y + 4900 + ( m - 14 ) / 12) / 100) / 4) +d - 32075;      
Ответ #4. Отвечает эксперт: sattar varMonth1,Month2,Year1,Year2,Day1,Day2:Integer;
 Month,Day,Year:Integer;
 
 Function CaseMonth(Month:integer):integer;
 begin
 case Month of
 1,3,5,7,8,10,12:Result:=31;
 4,6,9,11:Result:=30;
 2: Result:=28;
 end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
 Memo1.Clear;
 Day1:=StrToInt(Copy(DateToStr(DateTimePicker1.Date),1,2));
 Month1:=StrToInt(Copy(DateToStr(DateTimePicker1.Date),4,2));
 Month2:=12;
 Year1:=StrToInt(Copy(DateToStr(DateTimePicker1.Date),7,4));
 Year2:=StrToInt(Copy(DateToStr(DateTimePicker2.Date),7,4));
 For Year:=Year1 to Year2 do  begin
 if Year=Year2 then  Month2:=StrToInt(Copy(DateToStr(DateTimePicker2.Date),4,2));
 For Month:= Month1 to Month2 do
 begin
 if Month=12 then day2:=31 else
 begin
 Day2:=CaseMonth(Month);
 if Month=Month2 then  Day2:=StrToInt(Copy(DateToStr(DateTimePicker2.Date),1,2));
 end;
 For Day:=Day1 to  Day2 do
 Memo1.Lines.Add(IntToStr(Day)+'  '+IntToStr(Month)+'  '+IntToStr(Year));
 Day1:=1;
 end;
 Month1:=1;
 end;
 end;
 
|  | Ответ отправил: sattar (статус: 2-ой класс)Время отправки: 27 октября 2006, 21:54
 
 |  
 Мини-форум вопросаВсего сообщений: 1; последнее сообщение — 26 октября 2006, 15:21; участников в обсуждении: 1. 
|   | Dron (статус: Студент), 26 октября 2006, 15:21 [#1]:Игорь Середюк: м-да... ну и грамотность у вас... С уважением. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |