Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
ВнизДата Найти похожие ветки
← →
Stupid (2002-11-26 05:47) [0]здравсвуйте, мастера. У меня возник вопрос:
Есть поле DBEdit1 - дата убытия в командировку
Есть поле DBEdit2 - дата окончания командировки
Как мне в поле DBEdit3 вывести количество дней в командировке, при условии, что учитываются и день убытия и день прибытия? Заранее благодарен. Если можно, с примером.
← →
BoxTer (2002-11-26 06:58) [1]Создаешь новый TField с именем Itog с типом fkCalculated и типом данных Integer. Затем на событие onCalcFields твоей таблицы (например Table1) пишешь что-то типа:
...
with Table1. do Begin
FieldByName("Itog").asInteger:=FieldByName("DataEnd").asDateTime-FieldByName("DataStart").asDateTime+1;
end;
//+1 - учитываем все дни!
...
enjoy...
← →
Stupid (2002-11-26 07:27) [2]Большое спасибо.
← →
Stupid (2002-11-26 08:54) [3]А почему-то не пошло.
← →
tanuha (2002-11-26 09:16) [4]//Привожу пример кода:
//даты записаны в Edit1 и Edit2 соответственно
var vDay1, vMonth1, vYear1, vDay2, vMonth2, vYear2: Word;
ColDays, //Количество дней (результат)
i, dd1, dd22, dd12: Integer;
monthes: array[0..11] of Integer;
begin
monthes[0]:=31;
monthes[1]:=28;
monthes[2]:=31;
monthes[3]:=30;
monthes[4]:=31;
monthes[5]:=30;
monthes[6]:=31;
monthes[7]:=31;
monthes[8]:=30;
monthes[9]:=31;
monthes[10]:=30;
monthes[11]:=31;
ColDays:=0;
DecodeDate(StrToDate(Edit1.Text), vYear1, vMonth1, vDay1); //Декодируем дату (дата отбытия)
DecodeDate(StrToDate(Edit2.Text), vYear2, vMonth2, vDay2); //Декодируем дату (дата прибытия)
//---------------------------------------------------------------dd1:=0; //Сколько дней прошло с начала отнимаемого года до отнимаемой даты
for i:=0 to vMonth1-2 do //проходим по всем месяцам с начала года до текущего (второго), текущий не учитываем
dd1:=dd1+monthes[i]; //добавляем к общей сумме количество дней в нашем месяце
dd1:=dd1+vDay1; //Добавляем количество дней в нашей дате
if (IsLeapYear(vYear1)) and (vMonth1>2) then dd1:=dd1+1; //если год високосный, то увеличиваем кол-во дней на 1
//---------------------------------------------------------------dd22:=0; //Сколько дней прошло с начала текущего(второго) года до текущей даты
for i:=0 to vMonth2-2 do dd22:=dd22+monthes[i];
dd22:=dd22+vDay2;
if (IsLeapYear(vYear2)) and (vMonth2>2) then dd22:=dd22+1;
//---------------------------------------------------------------dd12:=0; //Сколько дней во всех годах от того до нашего
if (vYear1<vYear2) //отнимаемый год меньше текущего
then begin
for i:=vYear1 To vYear2-1 do
begin
if IsLeapYear(i) then dd12:=dd12+366
else dd12:=dd12+365;
end;
ColDays:=dd12+dd22-dd1;
end
else //отнимаемый год меньше или равен текущему (второму)
begin
for i:=vYear2 To vYear1-1 do
begin
if IsLeapYear(i) then dd12:=dd12+366
else dd12:=dd12+365;
end;
ColDays:=dd22-dd12-dd1;//-1 = поправка, т.к. считает включая текущий день одной даты и текущий день второй даты.
end;
//---------------------------------------------------------------Label1.Caption:=IntToStr(ColDays); //Результат
// Удачи! ТМ.
← →
Johnmen (2002-11-26 09:20) [5]Trunc(Date2)-Trunc(Date1)+1
← →
thick (2002-11-26 10:50) [6]CountDays:=(Date2-Date1+1)/EncodeTime(1,0,0,0)*24;
← →
Johnmen (2002-11-26 10:58) [7]>thick (26.11.02 10:50)
Забавно...А главное - неверно...:)
← →
Sras (2002-11-28 09:01) [8]DaySpan function
Returns the number of days (including fractional days) between two specified TDateTime values.
Unit
DateUtils
Category
datetime routines
Delphi syntax:
function DaySpan(const ANow, AThen: TDateTime): Double;
C++ syntax:
extern PACKAGE double __fastcall DaySpan(const System::TDateTime ANow, const System::TDateTime AThen);
Description
Call DaySpan to obtain the difference, in days, between two TDateTime values. Unlike the DaysBetween function, which only counts whole days, DaySpan reports incomplete days as a fraction of an entire day.
← →
Wolf226 (2002-11-28 09:53) [9]2 tanuha
Ну ты и намудрила! Ужас!
2 Stupid
Делай так:
На событие OnChange у DBEdit1 и DBEdit2 цепляй код.
edit3.text:=inttostr(floor(FieldByName("DataEnd").asDateTime)-floor(FieldByName("DataStart").asDateTime)+1);
Я использовал, edit вместо dbedit, т.к. думаю, что не стоит хранить это поле.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c