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

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

Разница между датами [D7, XP]


Страницы:   1 2 3 4 5 6 7 8 9

Andy BitOff (ppc) ©   (2007-11-08 13:07:00) 

Здравствуйте.
Что-то у меня уже башка не варит, сижу парюсь и шарики за ролики заходят...
Никак не удается получить разничу между датами в формате dd.mm.yy.
Например.
05.11.2007 и 08.11.2007 должно получиться 03.00.00, но при работе с типом дата месяц (как и год) не может быть равен 0.
Может кто подскажет как это можно реализовать?


OP   (2007-11-08 16:27:00) [141]


> Дата - это точка на оси времени. Разница между датами -
> это отрезок между точками. Нельзя отрезок представить в
> виде одной точки.

Согласен, максимум что можно - посчитать разницу между датами в днях... но такой ведь вариант его не устраивает...


Desdechado   (2007-11-08 16:09:00) [142]

Дата - это точка на оси времени. Разница между датами - это отрезок между точками. Нельзя отрезок представить в виде одной точки.


Anatoly Podgoretsky   (2007-11-08 15:42:00) [143]


> Неужели я бы стал тратить свое время,
>  трафик и ваше время, если бы мне это было не надо.

Не функции надо переписывать, а разработать теорию, по которой интервал 30 дней можно будет преобразовать в любую дату, разработаешь - нобелевку получишь.


Leonid Troyanovsky   (2007-11-08 15:29:00) [144]


> Andy BitOff (ppc)   (08.11.07 14:21) [17]

> Неверю.
> Любую задачу, тем более эту, можно решить/запрограммировать.

А и задачи-то никакой нет.
Скажем, что это некорректная постановка.

--
Regards, LVT.


engine   (2007-11-08 15:05:00) [145]

> [19] Johnmen ©   (08.11.07 14:54)

Ну, я ж и говорю, немного напильником доработать.
В остальных случаях вроде правильно считает.


Johnmen   (2007-11-08 14:54:00) [146]


> engine ©   (08.11.07 14:36) [18]

Что получится
29.02.1996 - 28.02.1995 = ?
01.03.1996 - 28.02.1995 = ?


engine   (2007-11-08 14:36:00) [147]

> [17] Andy BitOff (ppc)   (08.11.07 14:21)

function DatesBetween (FirstDate, SecondDate : TDateTime) : String;
var
  CountDays, CountMonth, CountYear : Integer;
  i, Year1, Year2 : Integer;
begin
 CountYear := YearOf(SecondDate) — Yearof(FirstDate);
 if MonthOf(SecondDate) < MonthOf(FirstDate) then
  begin
    dec(CountYear);
    CountMonth := 12 — MonthOf(FirstDate) + MonthOf(SecondDate)
  end
  else
    CountMonth := MonthOf(SecondDate) — MonthOf(FirstDate);
 if DayOf(SecondDate) < DayOf(FirstDate) then
  begin
    dec(CountMonth);
    CountDays := DaysInMonth(FirstDate)  — DayOf(FirstDate) + DayOf(SecondDate);
  end else
   CountDays := DayOf(SecondDate) — DayOf(FirstDate);
 Result := IntToStr(CountDays) + '.' +
           IntToStr(CountMonth) + '.' +
           IntToStr(CountYear);
end;


Вот вариант. Только требует обработки напильником


Andy BitOff (ppc)   (2007-11-08 14:21:00) [148]

Johnmen © (08.11.07 14:08) [16]
Неверю.
Любую задачу, тем более эту, можно решить/запрограммировать. Другое дело сколько понадобится для этого ресурсов (чел/часов, нервов и т.п).


Johnmen   (2007-11-08 14:08:00) [149]


> Andy BitOff (ppc)   (08.11.07 14:05) [14]

Дело в том, что неглупые грамотные люди тебе уже и сказали и намекнули, что никак. Поясняю - ни один, тобой придуманный "алгоритм", не будет правильным. Т.е. не будет давать верных с любой т.з. решений.


engine   (2007-11-08 14:06:00) [150]

> [12] Johnmen ©   (08.11.07 13:53)

Мдя, не подумал. Результат интересный получился. )))


Andy BitOff (ppc)   (2007-11-08 14:05:00) [151]

Johnmen © (08.11.07 13:54) [13]
Ну ты же умный человек. Неужели я бы стал тратить свое время, трафик и ваше время, если бы мне это было не надо.
Обычно (если, что бывает редко) я что-то здесь спрашиваю, то это значит, что я действительно зашел в тупик и не вижу выхода.
Я переписал уже три или четыре раза функцию для решения этой задачи, но так и не приуспел в этом. Поэтому и обратился сюда.
Сейчас обдумываю еще вариант, но мозги уже закипают.


Johnmen   (2007-11-08 13:54:00) [152]


> Далее с этими данными никаких действий производиться не
> будет.

М.б. тебе они и не нужны вовсе?


Johnmen   (2007-11-08 13:53:00) [153]


> engine ©   (08.11.07 13:19) [7]

"Работать" это что? Отсутствие ошибок в программе? Или правильный результат?


Andy BitOff (ppc)   (2007-11-08 13:50:00) [154]

> А тебя не смущает,...
Нет. Не смущает. Потому что пересчет в другие единицы не подразумевается. Я же указал в первом посте в каком формате нужен выход и это конечный выход. Далее с этими данными никаких действий производиться не будет.


stud   (2007-11-08 13:40:00) [155]

engine ©   (08.11.07 13:19) [7]

интересный должен результат получиться))))))


Sergey13   (2007-11-08 13:36:00) [156]

> [6] Andy BitOff (ppc)   (08.11.07 13:17)
> 00.00.01
> А что это не очевидно?

А тебя не смущает, что столь "очевидный" результат пересчитанный в другие единицы (дни, минуты и т.д.) для разных лет будет отличаться друг от друга?


Desdechado   (2007-11-08 13:28:00) [157]

Интервал неможет быть представлен в формате даты, т.к. месяцы, годы имеют разную длину.


engine   (2007-11-08 13:19:00) [158]

> [0] Andy BitOff (ppc)   (08.11.07 13:07)

function DatesBetween (FirstDate, SecondDate : TDateTime) : String;
begin
Result := IntToStr(DaysBetween(FirstDate, SecondDate)) + '.' +
          IntToStr(MonthsBetween(FirstDate, SecondDate)) + '.' +
          IntToStr(YearsBetween(FirstDate, SecondDate));
end;


Что-то типа того, не запускал, но должно работать.


Andy BitOff (ppc)   (2007-11-08 13:17:00) [159]

Забыл сказать. КОНЕЧНО результат в стринг,ну я думал это и понятно. ;)

> какая должна быть разница между 05.11.2007 и 05.11.2006?
00.00.01
А что это не очевидно?
Визуально и поработав мозгами это очевидно, а вот программная реализация, чего-то мне не дается.


Skyle   (2007-11-08 13:13:00) [160]


> Ega23 ©   (08.11.07 13:12) [4]
> > какая должна быть разница между 05.11.2007 и 05.11.2006?
> 525600 минут

В смысле минус?


Страницы:   1 2 3 4 5 6 7 8 9

Наверх

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