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

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

разница между датами в виде 22 года 4 месяца 12 дней [D7, WinXP]


~viper~ ©   (2005-09-20 12:52:00) 

Добрый день, уважаемые!

Помогите чем можете =). Есть такая необходимость посчитать разницу между двумя датами,например, нужно разница между датами 20.09.2005 и 01.05.1983, а вот тут собственно сама проблема, результат должен быть в виде /22 года/4 месяца/20 дней, а не сколько прошло месяцев или дней после этой даты!

Заранее благодарен за своевременную помощь!


evvcom   (2005-09-20 14:57:00) [1]


> Откуда нам знать???

А как ты тогда собрался задачу компьютеру объяснять? Допустим у тебя получилось 35 дней. Дай ответ без приведения дельфовых функций сколько это месяцев и дней?


Бурундук   (2005-09-20 14:56:00) [2]

Попробуй перебором.

Примерно так (набросал на ходу, на ошибки не проверял):

var
 date1, date2: TDateTime; // date1 < date2
 d, m, y,
 d_cnt, m_cnt, y_cnt: Word;

DecodeDate(date1, y, m, d);

y_cnt := 0;
repeat
 // прибавляешь по году и смотришь, сколько целых лет прошло
 if EncodeDate(y+y_cnt+1, m, d) < date2 then
   Inc(y_cnt) else
   Break;
until False;

m_cnt := 0;
repeat
 if EncodeDate(y+y_cnt, m + m_cnt + 1, d) < date2 then
   Inc(m_cnt) else
   Break;
until False; // целых месяцев

d_cnt := Trunc(date2 - EncodeDate(y+y_cnt, m + m_cnt, 0) );


Anatoly Podgoretsky   (2005-09-20 14:35:00) [3]

kblc ©   (20.09.05 14:33) [3]
Зачем же тогда делаешь гнусные намеки.


kblc   (2005-09-20 14:33:00) [4]

evvcom ©   (20.09.05 13:42) [2]
Зачем над людьми издеваешься? Откуда нам знать??? ;)))


evvcom   (2005-09-20 13:42:00) [5]


> ~viper~   (20.09.05 12:52)

Для начала ответь на вопросы:
1. 1 месяц - это сколько дней?
2. 1 год - это сколько дней?


kblc   (2005-09-20 13:02:00) [6]

Некогда попробовать. но так не катит:

 DayBetween:=StrToDate('20.09.2005') - StrToDate('01.05.1983');

- разница между ними в днях. Как это привести к ГГ/ММ/ДД я думаю ты догадаешься.. ;))

 Ещё точно помню что в SysUtils ещё что-то интересное есть...


Наверх

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