![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как посчитать сколько прошло ГГГГ.ММ.ДД
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]Вычитанием