Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.86 MB
Время: 0.057 c
11-1179414957
Vladimir Kladov
2007-05-17 19:15
2007.12.09
Версия 2.61


2-1195148582
Dark
2007-11-15 20:43
2007.12.09
SaveDialog


1-1190018023
andreoman
2007-09-17 12:33
2007.12.09
проблема отображения всплывающей подсказки


15-1194406235
Slider007
2007-11-07 06:30
2007.12.09
С днем рождения ! 7 ноября 2007 среда


1-1189776177
AndrewK
2007-09-14 17:22
2007.12.09
Настраиваемый TToolBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский