![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как подсчитать время прошедшее между двумя датами?
SSSdd © (2004-10-30 10:06:00)Имеется одна дата 12.06.2004 и вторая дата 24.08.2004.
Как программно подсчитать сколько прошло времени, в месяцах, днях и годах между начальной и конечной датами?
Anatoly Podgoretsky (2004-10-31 00:46:00) [1]SSSdd (30.10.04 19:21) [27]
Тогда при таком определении, алгоритм следующий
Interval := ABS(Trunc(D1) - Trunc(D2));
SSSdd (2004-10-30 19:21:00) [2]>Anatoly Podgoretsky © (30.10.04 15:25) [20]
>1.01.2004 и 2.01.2004 это сколько дней
Это 1 день, поскольку во сколько документы забрали - нет ни какой
разницы, а значит считаю что их забрали рано-рано утром.
>1.01.2004 23:59:59 и 2.01.2004 00:00:01 это сколько дней
Я считаю по числам а не по часам а значит, что с 1.01.2004 23:59:59 до 2.01.2004 00:00:01 прошел 1 день!
SergP (2004-10-30 19:13:00) [3]
> [22] Anatoly Podgoretsky © (30.10.04 16:06)
> type
> TDate = TDateTime
Согласен, я неправильно выразился...
Просто хотел сказать что время в часах, минутах и т.д. автор сабжа судя по сабжу не собирался учитывать, а что касается некоторой неоднозначности в определении "времени в годах, месяцах и днях" то она требует двух уточнений:
1). Какое кол-во дней в месяце.
2). Включаются или нет конечные даты.
Вобще-то я в [15] уже попытался ответить автору сабжа в том виде, в котором все недостающие данные найти и поставить будет уже его задачей.
> Почему такие элементарные вопросы вызывают такое бурное
> обсуждение?
Вот именно из-за того что элементарные, потому и вызывают столь бурное обсуждение. :-)))
begin...end (2004-10-30 18:35:00) [4]
> [23] Piter © (30.10.04 16:47)
> Почему такие элементарные вопросы вызывают такое бурное
> обсуждение?
Потому что они только кажутся элементарными... :-)
GuAV (2004-10-30 17:18:00) [5]Piter © (30.10.04 16:47) [23]
Почему такие элементарные вопросы вызывают такое бурное обсуждение?
Именно "элементарные" вопросы обычно вызывают бурное обсуждение. Тут действительно есть не однозначность. Например, определи что есть "за последние 2 дня". Впрочем тут и так примеров хватает.
Piter (2004-10-30 16:47:00) [6]Почему такие элементарные вопросы вызывают такое бурное обсуждение?
Не пойму я этого...
Anatoly Podgoretsky (2004-10-30 16:06:00) [7]
type
TDate = TDateTime
К тожу же вопрос не про тип, а сколько дней в первом и втором случае. На этот вопрос может дать ответ только автор, и от него будет зависть алгоритм расчета.
SergP (2004-10-30 16:03:00) [8]
> и второй уточняющий вопрос, то же самое но в дате есть и
> время
> 1.01.2004 23:59:59 и 2.01.2004 00:00:01 это сколько дней
В сабже ничего не сказано о том что используется TDateTime а не TDate.
Следовательно если речь идет о датах, то время тут не при чем...
Anatoly Podgoretsky (2004-10-30 15:25:00) [9]SSSdd (30.10.04 12:32) [14]
Можно и в днях, но ты не отвечаешь на первый уточняющий вопрос
1.01.2004и 2.01.2004это сколько дней
и второй уточняющий вопрос, то же самое но в дате есть и время
1.01.2004 23:59:59и 2.01.2004 00:00:01это сколько дней
-SeM- (2004-10-30 14:47:00) [10]Опа, у меня [16] ошибка ...
-SeM- (2004-10-30 14:38:00) [11]SSSdd (30.10.04 14:04) [17]
> Что такое DaysBetween?
F1?
SSSdd (2004-10-30 14:04:00) [12]Что такое
DaysBetween?
-SeM- (2004-10-30 14:00:00) [13]А вот что у меня вышло :)
var year, month, day: Word;
text: String;
date1, date2 : TDate;
days: Word;
date1 := StrToDate('20.05.2003'); // (Edit1.Text);
date2 := StrToDate('10.08.2003'); // (Edit2.Text);
text :='Прошло времени: ';
days := DaysBetween(date2, date1);
if days > 0 then begin
if IsInLeapYear(date1) or IsInLeapYear(date2) then inc(days);
DecodeDate(days , year, month, day);
day := day - 1;
if day = 30 then begin
inc(month);
day := 0;
end;
month := month - 1;
if month = 12 then begin
inc(year);
month := 0;
end;
year := year - 1900;
text := text + ' лет - ' + IntToStr(year) +
' месяцев - ' + IntToStr(month) +
' дней - ' + IntToStr(day);
end
else text := text + ' меньше суток';
// Label1.Caption := text;
Поругайте, я у себя исправлю ;)
SergP. (2004-10-30 13:55:00) [14]Вобщем для общего случая:
popravka1:
0 - Если одна из дат не включается
1 - Обе даты включаются
-1 - Обе даты не включаются
popravka2:
Количество дней в месяце используемое для вычислений....
DecodeDate(datebegin,y1,m1,d1);
DecodeDate(dateend + popravka1,y2,m2,d2);
dx := d2 - d1;
if dx < 0 then
begin
inc(dx,popravka2);
dec(m2);
end;
mx := m2 - m1;
if mx < 0 then
begin
inc(mx,12);
dec(y2);
end;
yx := y2 - y1;
Получаем:
yx - кол-во лет
mx - кол-во месяцев
dx - кол-во дней
SSSdd (2004-10-30 12:32:00) [15]А если просто в месяцах или днях?
ПОМОГИТЕ ПОЖАЛУЙСТА.
sniknik (2004-10-30 12:12:00) [16]неправильно, на самом деле прошло 2 месяца и 21 день
в 5 31 день значит до 6го 11 + 30(6й) + 31(7й) + 10 итого 82, что и показывает разность этих двух дат,
а вот ккой результат показвать при
Отданы : 11.05.2003
Сегодня : 10.08.2003
?
2 месяца и 30дней или 3 месяца? (или может, но не с этими месяцами, 3месяца и 2 дня ???)
требуй от заказчика точную формулу расчета. имхо. потому как если он твою не поймет это гарантировано припишут к глюку программы, даже если по твоему вернее будет.
Anatoly Podgoretsky (2004-10-30 11:59:00) [17]Пусть твой заказчик дасть точное определение сколько дней в месяце, только тогда задача будет иметь решение.
SSSdd (2004-10-30 11:40:00) [18]Мне нужно вот что, я делаю программу которая работает с документами . Я ее почти закончил, но заказщик сказал что ему нужно следующее :
нужно чтобы программа показывала когда документы отданы и сколько с тех пор прошло времени.
Когда они отданы - эта дата последнего изменения файла архива. Потом есть еще и сегодняшняя дата и надо между этими датами подсчитать сколько прошло времени.
Например :
Отданы : 20.05.2003
Сегодня : 10.08.2003
Прошло времени : 2 месяца 20 дней.
ну или что-то вроде того. Можете помочь?
Anatoly Podgoretsky (2004-10-30 11:40:00) [19]-SeM- (30.10.04 11:31) [9]
d2 - d1 + 1
второй вопрос зависит от ответа на первый, может и не понадобится.
Ничто так тяжело не дается людям с высшим образованием, как работа со временем.
-SeM- (2004-10-30 11:31:00) [20]Anatoly Podgoretsky ©
Объясните пожалуйста, в каком случае (в вашем примере) разница будет составлять 2 дня.
> есть и еще один
Какой?