Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.16;
Скачать: CL | DM;

Вниз

Дата   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
1-51692
Romaizdurdoma
2002-12-05 22:10
2002.12.16
Массив в качестве параметра


6-51875
kofman
2002-10-21 01:03
2002.12.16
Как прочитать строчку из файла с сервера?


3-51642
Дмитрий Орехов
2002-11-27 16:19
2002.12.16
Проблема с тригером


4-52034
dinn
2002-11-05 01:35
2002.12.16
А можно ли? А если можно-то как?


1-51719
Кирилл
2002-12-06 10:56
2002.12.16
мне нужно получить длину текста из Edit в пикселях...