Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.12.09;
Скачать: CL | DM;

Вниз

Разница между датами   Найти похожие ветки 

 
korneley ©   (2007-11-09 15:03) [120]


> далее 31>30, но что мы видим??? 0.1.0 = 0.1.0 !!!
Да, но месяц-то и там и там один прошел. Так чему удивляться?


 
korneley ©   (2007-11-09 15:05) [121]


> А Вас я очень прошу, пожалуйста, хватит флудить
Пошел стену искать, засим замолкаю....


 
Anatoly Podgoretsky ©   (2007-11-09 15:18) [122]

> korneley  (09.11.2007 14:53:57)  [117]

Но это нормальный путь, когда документально оформляются бизнес правила.
Например я встречал места, где утверждено, что в месяце 30, 30.5, 31 день, в основном 30 дней в месяце и 365 или 365.25 в году
А без этого вы будете друг другу бить морды и обвинять друг друга. В большинстве места не мудрят а измеряют в днях


 
SergeyIT ©   (2007-11-09 15:26) [123]


> Johnmen ©   (09.11.07 14:53) [118]
>
> Вы что, мой вопрос не поняли? Поясняю - почему у Вас разница
> дат для примера [106] одинаковая, хотя любой, знающий вычитание,
>  человек видит, что она разная?

Разве разная? - ровно 1 месяц получается.
Вот и korneley Вам указал на это.
Засим тоже умолкаю.


 
Johnmen ©   (2007-11-09 15:34) [124]


> SergeyIT ©   (09.11.07 15:26) [123]

Дурковать многие умеют. Но у Вас это получается очень тонко - первое впечатление, что Вы тупой. Ан нет!
Засим тоже умолкаю.
И это правильно.


 
Германн ©   (2007-11-09 15:53) [125]


> Засим тоже умолкаю.
> И это правильно.
>

Нет. Правильно будет за сим.
:)


 
Джо ©   (2007-11-09 16:08) [126]

> [125] Германн ©   (09.11.07 15:53)
>
> > Засим тоже умолкаю.
> > И это правильно.
> >
>
> Нет. Правильно будет за сим.
> :)

Нет, как-раз первоначальный вариант — правильный.
Но все это оффтоп, конечно.


 
clickmaker ©   (2007-11-09 16:11) [127]


> Правильно будет за сим

Правильно будет: "Ну! За присутствующих здесь Сим!"


 
Германн ©   (2007-11-09 16:19) [128]


> Джо ©   (09.11.07 16:08) [126]

Угу. Был не прав.


 
Anatoly Podgoretsky ©   (2007-11-09 17:04) [129]

> clickmaker  (09.11.2007 16:11:07)  [127]

"Ну! За присутствующих здесь Засим!"


 
korneley ©   (2007-11-09 17:48) [130]

[126] - [129]
А ещё меня во флуде упрекали :) Но, тем не менее поддержу:" И за DIMM!"


 
engine ©   (2007-11-09 18:07) [131]

А в сутках 23, 24 или 25 часов? )))


 
Anatoly Podgoretsky ©   (2007-11-09 19:08) [132]

> korneley  (09.11.2007 17:48:10)  [130]

А ты чего хочешь то? Ветка давно уже флудерская, ее может стоит в Потрепаться кинуть. Если ветка не удаляется, то только лишь потому, что автор еще матом не ругается.


 
Andy BitOff ©   (2007-11-10 02:29) [133]


> Anatoly Podgoretsky ©   (09.11.07 19:08) [132]
>  Если ветка не удаляется, то только лишь потому,
> что автор еще матом не ругается.

Я на редкость спокойный и терпеливый, даже, не побоюсь этого слова - толерантный, меня трудно вывести из равновесия, да еще довести до такой степени, что бы я прилюдно стал ругаться матом.
Это вам, уважаемым, видно нечем заняться, всё флудите, да флудите, а некоторые (не будет тыкать в грудь пальцем) в это время работают ;)
А по поводу сабжа. Реализация возможна. Алгоритм проработан и испытан вручную, на кошках.
Спасибо SergeyIT за понимание и поддержку, он в одиночку сражался с флудерами до конца =)
Спасибо Johnmen, который честно пытался доказать, что реализация этой задачи не возможна. А спасибо именно за то, что направил на путь истинный, может быть сам этого и не осознавая. Именно из его постов было подчерпнуто зерно истины.
Ну, а остальным, за столь долгое обсуждение темы. =) Это же надо 132 поста!


> Johnmen ©   (09.11.07 13:22) [106]
> > SergeyIT ©   (09.11.07 12:57) [101]
> 1. 15.06.2007 - 15.07.2007 = 0.1.0
> 2. 15.07.2007 - 15.08.2007 = 0.1.0
> При этом
> 1. = 30 суток
> 2. = 31 сутки
> далее 31>30, но что мы видим??? 0.1.0 = 0.1.0 !!!

Всё правильно. В 6 месяце 30 дней, а в седьмом 31, в этом как раз и суть. И ответ правильный. Посчитайте пальчиком (не вычитанием) на календаре и вы увидите, что между этими датами ровно МЕСЯЦ или 30 и 31 день, соответственно. Вот где зерно истины. В предыдущем месяце.


 
Германн ©   (2007-11-10 02:37) [134]


> Andy BitOff ©   (10.11.07 02:29) [133]
>
>

"И вечный бой. Покой нам только снится!"


 
Andy BitOff ©   (2007-11-10 02:45) [135]


> Германн ©   (10.11.07 02:37) [134]

Флудеров я уже поблагодарил. Им можно больше не беспокоиться. Тем более, что ветка не в потрепаться.


 
Германн ©   (2007-11-10 03:05) [136]


> Andy BitOff ©   (10.11.07 02:45) [135]
>
>

А чем ты лучше (выше) тех, кого
> уже поблагодарил.
?
Задачу не поставил. Это раз.
Обстановку не описАл. Это два.
И требовал решения!

АП прав. Ветка была изначально флудерская.


 
Джо ©   (2007-11-10 03:08) [137]

Кстати, кто-то соберется, наконец, дать формальное описание задачи?
А то пока наблюдаются многократные попытки написать незнамо что.
Как-то оно, ИМХО, утомительно.


 
Andy BitOff ©   (2007-11-10 04:04) [138]

Дано:
Два значения типа TDate.
Первое >= второму.
В частном случае, первое значение Now()
Задача:
Получить разницу между этими датами (количество полных дней, месяцев, лет) в строковую переменную в формате dd.mm.yy
Например:
Now() - Now() = 00.00.00
Now() - (IncDay(Now()), - 1) = 01.00.00
05.11.2007 - 05.11.2006 = 00.00.01
15.07.2007 - 15.06.2007 = 00.01.00
15.08.2007 - 15.07.2007 = 00.01.00


 
Andy BitOff ©   (2007-11-10 04:14) [139]


> Германн ©   (10.11.07 03:05) [136]
> Задачу не поставил. Это раз.
> Обстановку не описАл. Это два.И требовал решения!

Задачу поставил. Согласен, что неказисто, но на то время у меня моск плавился. Но позже, несколькими постами ниже, её всё-таки выяснили.
Обстановку. Какую обстановку? Ну сидел на стуле за столом, лицом вперед. Передомной стоял ноутбук, в руках КПК - писал сюда пост. Вот и вся обстановка. А, еще народ вокруг какой-то был, но я думаю, это не столь существенно, или вам нужны их имена?


 
Virgo_Style ©   (2007-11-10 09:27) [140]

> Andy BitOff ©   (10.11.07 04:04) [138]
> (количество полных дней, месяцев, лет)


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


 
Andy BitOff ©   (2007-11-10 11:36) [141]

А я чего-то не понял...
Что нет функции, которая возвращает количество дней в месяце по году и месяцу?


 
Andy BitOff ©   (2007-11-10 11:55) [142]

Да я, собственно, как и писал выше, уже решил эту задачу. Правда в выходные я редко пишу, но алгоритм готов, если кому интересно, то могу вечером его набрасать (будет над чем пофлудить ;) ). А если кому код надо, то в понедельник.


 
Anatoly Podgoretsky ©   (2007-11-10 12:04) [143]

> Andy BitOff  (10.11.2007 11:36:21)  [141]

Ну вот опять, интервал это не точка на шкале времени. После получения интервала никакой год и месяц не существует.
Похоже что это длинное обсуждение пошло насмарку.


 
Johnmen ©   (2007-11-10 21:51) [144]


> Andy BitOff ©   (10.11.07 02:29) [133]
> Всё правильно. В 6 месяце 30 дней, а в седьмом 31, в этом как раз и суть.
> И ответ правильный. Посчитайте пальчиком (не вычитанием) на календаре
> и вы увидите, что между этими датами ровно МЕСЯЦ или 30 и 31 день,
> соответственно. Вот где зерно истины. В предыдущем месяце.

Следуя этой логике между 31.01.2007 и 02.03.2007 ровно месяц, т.е. 31 сутки, ведь это "зерно истины, предыдущий месяц". Да?
Я думаю, что ты все равно не понял сути. Почитай последние посты дяди Толи (не флудерские), подумай...


 
Anatoly Podgoretsky ©   (2007-11-10 22:28) [145]

> Johnmen  (10.11.2007 21:51:24)  [144]

Ты скоро будешь писать - дедушки Толи :-)
А по сути, очень мало кто понимает, что такое время.


 
Виталий Панасенко(дом)   (2007-11-10 23:47) [146]


> Anatoly Podgoretsky ©   (10.11.07 22:28) [145]

Время и пространство когда-то были единой сущностью..А по сути вопроса.. фигня какая-то, а не вопрос.. Между датами можно получить РАЗНИЦУ В ДНЯХ..Но то, что просит автор... Я думаю DateDiff поможет...Из JEDI.. возвращает разницу между датами в днях, месяцах, годах


 
Johnmen ©   (2007-11-11 00:00) [147]


> Anatoly Podgoretsky ©   (10.11.07 22:28) [145]
> Ты скоро будешь писать - дедушки Толи :-)

Ты станешь дедом? Серьезно?

> А по сути, очень мало кто понимает, что такое время.

Это точно. Но не понимая еще и пальцы гнут и неокрепшие души развращают... :)
Грустно...


 
Anatoly Podgoretsky ©   (2007-11-11 00:05) [148]


> Время и пространство когда-то были единой сущностью.

Но потом появились программисты.


 
Германн ©   (2007-11-11 00:15) [149]

"Time is the Simplest Thing"
Copyright © 1961 Clifford D. Simak


 
Progs   (2007-11-11 07:21) [150]

>>>Виталий Панасенко(дом)   (10.11.07 23:47) [146]
Между датами можно получить РАЗНИЦУ В ДНЯХ.

Странная конечно ситуация.
Хорошо, а почему бы автору  не разбить заранее кол-во дней по месяцам (что то типа констант некоторых, вдобавок проработав календарь :) проги же есть), а получив результат в виде разницы в количестве дней, преобразовать в тот вид который ему нужен и не ломать голову. Конечно грубовато, в одну строку код не получится.
Потому что, как посмотрю, спор уже идет по терминологии, сколько дней там, сколько здесь и т.д. и т.п.

С уважением.


 
Sergey Masloff   (2007-11-11 09:03) [151]

Ну и флуда... Там за полчаса пишется
см. http://delphimaster.net/view/15-1194730016/ пост [101]


 
ari_9   (2007-11-11 13:31) [152]

я понимаю, как глупо влезать в такую тему на третий день флуда, но тем не менее. если автору нужен ответ в ОБЩЕГУМАНИТАРНОМ смысле, что-ли, то он, очевидно, может быть дан

ведь когда говорят, мне "двадцать восемь лет, один месяц и 16 дней" этот ответ тоже никак не может быть однозначно преобразован в дни (високосные годы и разные длины месяцев). но так иногда говорят

есть первая дата year1.month1.day1 и вторая, year2.month2.day2. тогда ответом будет yearХ.monthХ.dayХ, где :

yearХ - количество ПОЛНЫХ лет между year1.month1.day1 и year2.month2.day2

monthХ - количество ПОЛНЫХ месяцев между year1+yearХ.month1.day1 и year2.month2.day2

dayХ - количество дней между year1+yearХ.month1+monthХ.day1 и year2.month2.day2


 
ari_9   (2007-11-11 13:49) [153]

да, конечно в этом случае будет интересная ситуация, например, между 2006.08.31 и 2006.10.01, потому что полный месяц разницы - один, а даты (2006+0).(8+1).31 не существует (в сентябре 30 дней). но это просто означает, что необходимо определить поведение в этом случае - либо переносить дни в следующий месяц, либо всего обрезать число даты до максимального в полученном месяце

самый интересный вопрос - можно ли добиться таким образом свойста аддитивности алгоритма. то есть сумма разниц (дата 1 -  дата 2) и (дата 2 - дата 3) будет равна (дата 1 - дата 3) для любых дат ? ... ясно, что обрезая числа месяца - нельзя. а перенося их в следующий, мне кажется - да


 
Andy BitOff ©   (2007-11-12 10:21) [154]


> Johnmen ©   (10.11.07 21:51) [144]
> Следуя этой логике между
> 31.01.2007 и 02.03.2007 ровно месяц, т.е. 31 сутки, ведь это
> "зерно истины, предыдущий месяц". Да?Я думаю, что ты все
> равно не понял сути. Почитай последние посты дяди Толи (не
> флудерские), подумай...

> "зерно истины, предыдущий месяц". Да?
Да!
Я думаю, что ты все равно не понял сути. (c)Johnmen
31.01.2007 и 02.03.2007
Мне сейчас лень считать, но про 31 сутки ты не прав, предыдущий месяц 28 суток, вот и посчитай сколько будет.

Смотри, на данном примере. Берем общее количество дней между датами (нет дельфей под рукой, сколько там будет?) примерно 1+28+2, т.е. 31 (впрочем, как ты и заметил). Теперь получаем количество дней в 01.2007, их 31. Число текущего обрабатываемого месяца 31 (31.01.2007), увеличим некую переменную отвечающую за количество дней на результат их разницы (кол.д.тек.мес. - чис.обр.дня) = 0 дней  + 1 день, чтобы текущим стал 02.2007 итого 1. Вычтем из общего числа дней эту некую переменную = 30. Поскольку январь кончился (и мы об этом знаем), то переходим к февралю. Получаем количество дней в 02.2007 = 28.
Увеличим ту некую переменную отвечающую за количество дней на результат их разницы (кол.д.тек.мес. - чис.обр.дня) = 27 дней  + 1 день, чтобы текущим стал 03.2007 итого 1 + 28. Вычтем из общего числа дней эту некую переменную = 1. НО ПОСКОЛЬКУ МЫ ТОЛЬКО ЧТО ОБРАБОТАЛИ ЦЕЛЫЙ МЕСЯЦ, то увеличим некую переменную отвечающую за количество месяцев и обнулим ту, которая дней. Получаем количество дней в 03.2007 = 31, но это явно меньше чем у нас осталось от общего количества, за сим просто возьмем остаток дней 2 и еще +1 и прибавим их к той некой переменной, которая отвечала за дни = 3. Всё. Результат 03.01.00

P.S.
Это грубое описание алгоритма. Но в ОБЩЕМ всё понятно и правильно.

P.P.S.
К тому же я уже говорил, что ЭТО КОНЕЧНЫЙ СТАТИСТИЧЕСКИЙ РЕЗУЛЬТАТ  и никакой дальнейшей обработки этой строки производиться не будет. За сим, мне по барабану, можно ли получить обратный результат и т.п.

P.P.P.S.
Этот текст я набирал сегодня в пять утра, так что возможна некоторая сумбурность. За это прошу прощения. Сейчас пришел с работы после бессонной ночи и собираюсь поспать.


 
Anatoly Podgoretsky ©   (2007-11-12 11:53) [155]

> Andy BitOff  (12.11.2007 10:21:34)  [154]

> так что возможна некоторая сумбурность.

Хм, я думал, что у слова некоторая немного другое значение, это не некоторая, а большая ее половина.


 
Johnmen ©   (2007-11-12 14:39) [156]


> Andy BitOff ©   (12.11.07 10:21) [154]

Хорошо. Я правда не понял алгоритма.
Итак имеем
31.01.2007 - 02.03.2007 = 03.01.00
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 01.03.2007 = 02.01.00
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 28.02.2007 = 01.01.00 так, да?
уменьшаем вычитаемое на 1 сутки
31.01.2007 - 27.02.2007 = 00.01.00 так, да?

Продолжай думать...:)


 
Andy BitOff ©   (2007-11-12 15:23) [157]


> Johnmen ©   (12.11.07 14:39) [156]

Попробуй прочитать еще раз.
Последние две строчки не правильно, потому что "зерно истины, предыдущий месяц", а там он уже январь, где 31 день.


 
Johnmen ©   (2007-11-12 15:50) [158]


> Andy BitOff ©   (12.11.07 15:23) [157]

Т.е. при заданной начальной дате в непрерывной казалось бы разнице дат возникают разрывы!!!
Не существует разницы 01.01.00! А также 00.01.00!
Как же так?


 
Andy BitOff ©   (2007-11-12 19:08) [159]

Почему не существует? Очень даже существует.
01.01.2007 - 31.01.2007 = 00.01.00 потому, что в январе 31 день, что в свою очередь, является эквивалентом месяца (для января). Так же как и 01.02.2004 - 29.02.2004 = 00.01.00 и 01.02.2005 - 28.02.2005 = 00.01.00
В то время как:
01.01.2007 - 01.02.2007 = 01.01.00
а
01.02.2005 - 29.02.2005 вообще вернет ошибку еще до начала работы алгоритма, т.к. будет проверка валидности дат.

Основы алгоритма, это изначальное вычитание дат, дабы узнать количество дней их разделяющих. И далее, начиная от заданной меньшей даты вычитать из общего количества дней, количество дней в "текущем" месяце, который изначально совпадает с наименьшей датой, а в последствии передвигается вперед по календарю до конечной даты.


 
Johnmen ©   (2007-11-12 19:38) [160]

Вопрос
31.01.2007 - ??? = 00.01.00

ЗЫ
И в [156] и далее знак "-" считать не как вычитание, а как "с .. по ...". Впрочем, я думаю, все поняли.



Страницы: 1 2 3 4 5 вся ветка

Текущий архив: 2007.12.09;
Скачать: CL | DM;

Наверх




Память: 0.84 MB
Время: 0.033 c
15-1194183933
xayam
2007-11-04 16:45
2007.12.09
приглашаю для тестирования поисковика


15-1194552152
@!!ex
2007-11-08 23:02
2007.12.09
Политики тупят...


2-1195046408
Jason
2007-11-14 16:20
2007.12.09
Как удалить динамически созданные едиты?


1-1190366442
nali
2007-09-21 13:20
2007.12.09
Ошибка при динамическом создании компонента.


2-1194648042
Riply
2007-11-10 01:40
2007.12.09
Разница в атрибутах при уничтожении объекта.