Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как посчитать сколько прошло ГГГГ.ММ.ДД


Mamochka ©   (2006-09-04 11:15:00) 

Есть начальная дата, есть конечная дата, Вопрос: Как посчитать сколько прошло ГГГГ.ММ.ДД от начальной даты до конечной?
Спасибо :о)


MBo   (2006-09-04 13:35:00) [1]

из RXLib.DateUtil:

procedure DateDiff(Date1, Date2: TDateTime; var Days, Months, Years: Word);
{ Corrected by Anatoly A. Sanko (2:450/73) }
var
 DtSwap: TDateTime;
 Day1, Day2, Month1, Month2, Year1, Year2: Word;
begin
 if Date1 > Date2 then begin
   DtSwap := Date1;
   Date1 := Date2;
   Date2 := DtSwap;
 end;
 DecodeDate(Date1, Year1, Month1, Day1);
 DecodeDate(Date2, Year2, Month2, Day2);
 Years := Year2 - Year1;
 Months := 0;
 Days := 0;
 if Month2 < Month1 then begin
   Inc(Months, 12);
   Dec(Years);
 end;
 Inc(Months, Month2 - Month1);
 if Day2 < Day1 then begin
   Inc(Days, DaysPerMonth(Year1, Month1));
   if Months = 0 then begin
     Dec(Years);
     Months := 11;
   end
   else Dec(Months);
 end;
 Inc(Days, Day2 - Day1);
end;


Ega23   (2006-09-04 12:38:00) [2]


> так или нет, если так что дальше мне делать с "С"?
>


Чему равно C? Например, 584.0 Тогда ты сможешь смело сказать, что с a по b прошло 584 дня. Или 50457600 секунд.


Думкин   (2006-09-04 12:33:00) [3]

> Mamochka ©   (04.09.06 11:43) [10]

Сколько в ваших терминах прошло
1. с 28 февраля 1992 года по 29 марта 1996 года?
2. с 28 февраля 1993 года по 29 марта 1994 года?
Почему?


Mamochka   (2006-09-04 11:43:00) [4]


> Ega23 ©   (04.09.06 11:33) [7]


ПОПРАВОЧКА :о)

вот смотри:

var a,b,c:TDateTime
begin
a:=Table1.FieldByName('Datain').AsDateTime; //Начальная дата
b:=Date; //Текущее значение даты
c:=b- a; //Получаем разницу
end;

так или нет, если так что дальше мне делать с "С"?


Mamochka   (2006-09-04 11:42:00) [5]


> Ega23 ©   (04.09.06 11:33) [7]

вот смотри:

var a,b,c:TDateTime
begin
 a:=Table1.FieldByName('Datain').AsDateTime; //Начальная дата
 b:=Date; //Текущее значение даты
 c:=b-c; //Получаем разницу
end;

так или нет, если так что дальше мне делать с "С"?


MBo   (2006-09-04 11:34:00) [6]

DateUtils.YearsBetween и т.п. функции


Ega23   (2006-09-04 11:33:00) [7]


> И он покажет например: 1 год 11 месяцев 22 дня


Что есть TDateTime? Целая часть - количество дней, прошедших с 30.12.1899. Дробная - часы-минуты-секунды-миллисекунды в рамках одного дня.
Вычитанием ты узнаешь разницу, как её потом в годы интерпретировать - твоё дело.


Desdechado   (2006-09-04 11:30:00) [8]

вычитанием


Mamochka   (2006-09-04 11:26:00) [9]


> Desdechado ©   (04.09.06 11:24) [4]

хорошо, а как?


Desdechado   (2006-09-04 11:24:00) [10]

Mamochka ©   (04.09.06 11:20) [3]
Если бы годы были одинаковой длины и месяцы - тоже, то да. Но это невозможно, поэтому только в днях.


Mamochka   (2006-09-04 11:20:00) [11]


> Ega23 ©   (04.09.06 11:18) [1]

И он покажет например: 1 год 11 месяцев 22 дня


Ega23   (2006-09-04 11:18:00) [12]

Если Tdatetime - то вычитанием.


MBo   (2006-09-04 11:18:00) [13]

Вычитанием


Наверх

Титульная страница Поиск, карта сайта Написать письмо