![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Разница между датами [D7, XP]
Andy BitOff (ppc) © (2007-11-08 13:07:00)
Страницы: < 1 2 3 4 5 6 7 8 9 >
Здравствуйте.
Что-то у меня уже башка не варит, сижу парюсь и шарики за ролики заходят...
Никак не удается получить разничу между датами в формате 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 минут
В смысле минус?