|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
суммирование дат :)
Народ нужна помощь!!
У меня на форме есть DBGridEh1 (в нем есть два столбца - дата/время), Еdit1, Edit2, DateTimePicker1 и DateTimePicker2 написал такую функцию, которая вычисляет разницу двух дат: Код:
function DataBetween(First,Second: TDateTime): string; var Y1,Y2,D1,D2,M1,M2,y,m,d: word; begin Result:= ''; if First>Second then exit; y1:=YearOf(First); y2:=YearOf(Second); m1:=MonthOf(First); m2:=MonthOf(Second); d1:=DayOf(First); d2:=DayOf(Second); if d1<=d2 then d:=d2-d1 else begin d2:=DaysInAMonth(y2,m2)+d2; m2:=m2-1; d:=d2-d1; end; if m1<=m2 then m:=m2-m1 else begin m2:=m2+12; y2:=y2-1; m:=m2-m1; end; y:=y2-y1; Result:= format('%d год %d месяц %d день',[y,m,d]); if y=0 then Result:=format('%d месяц %d день',[m,d]); if m=0 then Result:=format('%d месяц %d день',[y,d]); if (y=0) and (m=0) then Result:=format('%d день',[d]); end; Через обработчика OnClick кнопки Button1 результат вставляю в Edit1. Вот такая команда: procedure TForm1.Button1Click(Sender: TObject); var i : integer; begin For i:=0 to Form1.adotable1.RecordCount do begin If Form1.ADOTable1.FieldByName('aaa').AsBoolean = true then begin Form1.DateTimePicker2.Date:=Form1.ADOTable1.FieldByName('ayaktau_kuni').AsDateTime; Form1.DateTimePicker1.Date:=Form1.ADOTable1.FieldByName('bastau_kuni').AsDateTime; Form1.Edit1.Text:=DataBetween(Form1.datetimepicker2.date,Form1.datetimepicker1.date); end; end; end; Теперь мне надо сделать так, чтобы результаты между собой суммировались, это зависит от того, сколько у DBGridEh строк надо поставить результат в Edit2 Например: 1 год 11 месяцев 25 дней (Edit1) + 2 года 5 месяцев 12 дней (Edit2) = 4 года 5 месяцев 6 дней (Edit2) Заранее буду благодарен!!! Последний раз редактировалось Admin, 14.08.2009 в 11:05. |
#2
|
|||
|
|||
Во-первых, для вычисления разницы дат можно использовать DaysBetween. Во-вторых, насчёт суммы. При сложении даты с некоторым количеством дней можно использовать функцию IncDay. Но наверняка это ещё не всё. Если порыться в функциях модуля DateUtils то можно найти что-нибудь ещё. Не забудь подключить модуль DateUtils.
|