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

Вниз

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

 
Anatoly Podgoretsky ©   (2007-11-09 10:54) [80]

> korneley  (09.11.2007 10:33:17)  [77]

> а с первого числа любого месяца по последнее - один месяц". Во как.

С чего бы


 
Думкин ©   (2007-11-09 10:56) [81]

> Anatoly Podgoretsky ©   (09.11.07 10:52) [79]

А зачем мне это адресовывать? Я вопроса не задавал и не отвечал. Я лишь заметил, что год и день стоят не на тех местах.


 
ЮЮ ©   (2007-11-09 10:59) [82]

[80] Anatoly Podgoretsky ©   (09.11.07 10:54)
> С чего бы

Т.е. месяц февраль, это не только с 1 по последнее число февраля, но и последний день января и первый день марта?


 
korneley ©   (2007-11-09 11:04) [83]


> Anatoly Podgoretsky ©   (09.11.07 10:54) [80]
> > korneley  (09.11.2007 10:33:17)  [77]
>> а с первого числа
>> любого месяца по последнее - один месяц". Во как.
> С чего бы

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


 
Dib@zol ©   (2007-11-09 11:12) [84]

Рискну предположить: а если вычислить кол-во дней между датами, а потом отнять от него сначала кол-во дней в январе, затем в феврале бОльшего года, затем - в марте итд пока количество дней не станет меньше количества дней в том месяце, чьи дни отнимаем. Если все месяцы отняты, а дни ещё не кончились, прибавляем год. И февраль уже считаем по [больший_год - 1] году. Ет цетера.

Может подойдёт?


 
MsGuns ©   (2007-11-09 11:20) [85]

ИМХО, человек путает две достаточно разные вещи: даты и интервал в единицах времени.
Для первого случая вполне достаточно TDateTime, для второго - TTimeStamp
Если надо определить интервал между достаточно отстоящими друг от друга датами, то без некоторых условностей (например считать, что в месяце 30 дней, а в году 365 дней) не обойтись. Если интервал небольшой (например, время вычисления чего-нибудь), то вполне подходит "измерение" в сутках, часах, минутах и секундах


 
korneley ©   (2007-11-09 11:23) [86]


>  а потом отнять от него сначала кол-во дней в январе
Почему с января - то? Тогда уж надо вычитать кол-во дней того месяца и того года с которого стартуем... Ну и так далее.


 
korneley ©   (2007-11-09 11:26) [87]


> то без некоторых условностей (например считать, что в месяце
> 30 дней, а в году 365 дней) не обойтись

В году - один год, а не 365 дней. А в месяце - месяц.


 
MsGuns ©   (2007-11-09 11:30) [88]

>korneley ©   (09.11.07 11:26) [87]

Просто хочется поговорить ?


 
ЮЮ ©   (2007-11-09 11:36) [89]

> Почему с января - то? Тогда уж надо вычитать кол-во дней
> того месяца и того года с которого стартуем... Ну и так
> далее.


Это пожалуй лишнее. Полный месяцы внутри крайних дат периода и так месяцы, кадлый 12 из них дадут 1 год (то же касается и годов при многолетнем интервале).

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


 
korneley ©   (2007-11-09 11:37) [90]


> Просто хочется поговорить ?
Не то слово :))) А все таки [77] и [83]...


 
Думкин ©   (2007-11-09 11:41) [91]

> ЮЮ ©   (09.11.07 11:36) [89]

Если номер дня начала, больше или равен чем номер дня конца, то месяц и дни, если меньше, то только дни считать. И все.


 
ЮЮ ©   (2007-11-09 11:54) [92]

> Если номер дня начала, больше или равен чем номер дня конца,
> то месяц и дни, если меньше, то только дни считать. И все.

алгоритм.  

т.е. между 30 января и 2 февраля МЕСЯЦ и ДНИ?

Даже если и наоборот, то трудности остаются, например, с 27 февраля по 26 марта. 28 дней по меркам февраля - месяц, а по меркам марта только 28 дней


 
Думкин ©   (2007-11-09 11:59) [93]


> т.е. между 30 января и 2 февраля МЕСЯЦ и ДНИ?

Я написал довольно доступно, но с точностью до наоборот. :)
2 меньше 30 - соответственно никаких месяцев.

А трудности в топку, в этом случае 1 месяц и 1 день. И на мерки по боку - все-равно задача не из разряда точных, а для рюшечек. Ни один человек в здравом уме серьезно к таким данным относиться не будет. Ее невозможно формализовать так, что бы все всегда были довольны. А потому делаем как проще. :)


 
ЮЮ ©   (2007-11-09 12:12) [94]

> Ни один человек в здравом уме серьезно к таким данным относиться
> не будет

Примерно так считают стаж, там где он нужен. И когда кому-то не хватит 1го дня для какой-либо льготы, то это уже не рюшечки.


> в этом случае 1 месяц и 1 день

Опять как-то противорешишь, ибо 26 меньше 27 - соответственно никаких месяцев.


 
Думкин ©   (2007-11-09 12:21) [95]

> ЮЮ ©   (09.11.07 12:12) [94]

1. Тогда задачу и надо уточнять у этих некоторых, желательно с привязкой к закону или, если закон не регулирует такие моменты или допускает вольность, обратиться в суд. Ибо если данные для  будут основываться только на моих наработках или палцетыканьем отдела кадров, то я или они могу такого понасчитать....
2. Числа не глянул, показалось, что 26 февраля и 27 марта, тогда по меркам февраля - всяко месяц, а по марту таки не дотягивает. что вписывается в объяснение.  
В таком случае, конечно - никаких месяцев при таком подходе.


 
Думкин ©   (2007-11-09 12:25) [96]

> ЮЮ ©   (09.11.07 12:12) [94]

А чтобы никто не ушел обиженным, считать надо так:

30 декабря 2001 и 3 февраля 2003
Разница 2 года 2 месяца и 3 дня.

:о)


 
Anatoly Podgoretsky ©   (2007-11-09 12:35) [97]


> А зачем мне это адресовывать? Я вопроса не задавал и не
> отвечал.

А я и не адресу, а указываю на какое именно сообщение реагирую. А получатели нужные, они сами найдутся, кто захочет.


 
Anatoly Podgoretsky ©   (2007-11-09 12:36) [98]

> ЮЮ  (09.11.2007 10:59:22)  [82]

С первого по последнее число месяц не кончается, а кончается когда наступит первый день следующего месяца.


 
Думкин ©   (2007-11-09 12:37) [99]

> Anatoly Podgoretsky ©   (09.11.07 12:35) [97]

Ох уж твои клиенты...с толку сбиваешь ...


 
Anatoly Podgoretsky ©   (2007-11-09 12:38) [100]

> korneley  (09.11.2007 11:26:27)  [87]

> В году - один год, а не 365 дней. А в месяце - месяц.

Ну тогда ответь на вопрос, получили интервал 365 дней, это сколько лет 1 или менее?


 
SergeyIT ©   (2007-11-09 12:57) [101]

Вот вариант (только без обработки 29 - 28 февраля) - считаются годы, месяцы, дни.

function DateDiff(dat1, dat2: TDate): String; //result = |dat2 - dat1|
var
  id, im, iy: Integer;
  dd, dw, dat3: TDate;
begin
 dat1 := Floor(dat1); dat2 := Floor(dat2);
 if dat2 < dat1 then
 begin
   dd := dat2; dat2 := dat1; dat1 := dd;
 end;
 im := 0; iy := 0;
 dat3 := dat2;
 while TRUE do
 begin
   dd := IncMonth(dat2, -12 * (iy + 1));
   if dd < dat1 then break;
   inc(iy);
   dat3 := dd;
 end;
 dw := dat3;
 while TRUE do
 begin
   dd := IncMonth(dat3, -(im + 1));
   if dd < dat1 then break;
   inc(im);
   dw := dd;
 end;
 id := Trunc(dw - dat1);
 Result := IntToStr(id) + "." + IntToStr(im) + "." + IntToStr(iy);
end;


 
Anatoly Podgoretsky ©   (2007-11-09 13:01) [102]

> Думкин  (09.11.2007 12:37:39)  [99]

Я вообще то на твою голову расчитывал :-)
А если серьезно я взял твои данные и предложил альтернативу.


 
Думкин ©   (2007-11-09 13:06) [103]

> Anatoly Podgoretsky ©   (09.11.07 13:01) [102]

С головой у меня сейчас туго, поэтому так. :)
Есть контрол типа эдит - в нем написан текст. Берешь его оттуда - а он пустой. Зашибись. Это в том, в чем сейчас варюсь - не дельфи. Поэтому мозги просушиться повесил.


 
Anatoly Podgoretsky ©   (2007-11-09 13:07) [104]

Меня всю дорогу смущает, что интервал пытаются представить в формате dd.mm.yyyy - вам пользователей не жалко?


 
Johnmen ©   (2007-11-09 13:16) [105]

> Думкин ©   (09.11.07 12:25) [96]

Крута :)))


 
Johnmen ©   (2007-11-09 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 !!!

Как тебя понимать, Саид? (с)


 
Sergey13 ©   (2007-11-09 13:23) [107]

Предлагаю ввести универсальную единицу интервала времени - ГАК.
IF YearsBetween(FirstDate, SecondDate)>1 THEN Result := "Год с ГАКОМ";


 
korneley ©   (2007-11-09 13:48) [108]


> Ну тогда ответь на вопрос, получили интервал 365 дней, это
> сколько лет 1 или менее?
Дык, елы-палы, братушка, я ж объяснял, что не надо интервал в днях получать, ну не интересно ему, что прошло N дней, а интересно, что год. Или месяц. Или неделя (во! в неделе точно = 7 дней). Если человеку надо в его единицах результат выдать (уж не важно почему), то и пользовать надо эти единицы


 
Leonid Troyanovsky ©   (2007-11-09 13:58) [109]


> korneley ©   (09.11.07 13:48) [108]

> Дык, елы-палы, братушка, я ж объяснял, что не надо интервал
> в днях получать, ну не интересно ему, что прошло N дней,
>  а интересно, что год. Или месяц. Или неделя (во! в неделе
> точно = 7 дней). Если человеку надо в его единицах результат
> выдать (уж не важно почему), то и пользовать надо эти единицы

Так вот пусть оный человек и предлагает методику расчета того,
что его интересует (и под этим подписывается).
Ну, а дальше - дело техники.

Бесплатно же можно получить лишь то, что до недель вкл.

--
Regards, LVT.


 
korneley ©   (2007-11-09 14:01) [110]


> Leonid Troyanovsky ©   (09.11.07 13:58) [109]

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


 
SergeyIT   (2007-11-09 14:20) [111]


> Как тебя понимать, Саид? (с)

А так - месяц назад - это 9 октября 2007 года - и не важно сколько дней в месяце. Так и функция IncMonth в Дельфи работает.


 
korneley ©   (2007-11-09 14:32) [112]


> Так и функция IncMonth в Дельфи работает.

Во! Есть такая функция! Берем начальную дату и лепим IncMonth, пока не станет больше конечной. На 12 месяцев добавляем год. Дни - разница значения в предпоследней итерации от конечной даты.


 
Anatoly Podgoretsky ©   (2007-11-09 14:34) [113]

> korneley  (09.11.2007 13:48:48)  [108]

Так получает то он интервал в днях, нет интервала в таких изощренных форматах как dd.mm.yyyy


 
Anatoly Podgoretsky ©   (2007-11-09 14:35) [114]

> SergeyIT  (09.11.2007 14:20:51)  [111]

За то для 31.10.2007 месяц назад не 31.09.2007
и обратно - месяц вперед туже дату не получишь


 
Anatoly Podgoretsky ©   (2007-11-09 14:36) [115]

> korneley  (09.11.2007 14:32:52)  [112]

Все бы вам лепить, а у заказчика совсем другое представление, что такое месяц и год, необязательно совпадающее с твоим и возможно (вероятнее) он не сможет объяснить какое.


 
korneley ©   (2007-11-09 14:42) [116]


> и обратно - месяц вперед туже дату не получишь
Естественно, 31.10 - месяц вперёд - 30.11, о чем и речь. "И это правильно" (с)


 
korneley ©   (2007-11-09 14:53) [117]


>  возможно (вероятнее) он не сможет объяснить какое.

Не, ну это уже другая тема и решается не программированием, а, как минимум, переговорами с постановкой задачи и написанием ТЗ, в котором год будет хоть 100 суток, а сутки по 100 часов


 
Johnmen ©   (2007-11-09 14:53) [118]


> SergeyIT   (09.11.07 14:20) [111]
> А так - месяц назад - это 9 октября 2007 года - и не важно сколько дней в месяце.
> Так и функция IncMonth в Дельфи работает.

Вы что, мой вопрос не поняли? Поясняю - почему у Вас разница дат для примера [106] одинаковая, хотя любой, знающий вычитание, человек видит, что она разная?
И во-вторых. Прошу не отвечать на непоставленные вопросы, а отвечать на поставленные. Иначе это любимая Вами демагогия получается.


 
Johnmen ©   (2007-11-09 14:56) [119]


> korneley ©

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


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


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



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

Форум: "Начинающим";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.69 MB
Время: 0.054 c
15-1194719751
zvukoff
2007-11-10 21:35
2007.12.09
алгоритм сжатия PCM-данных


2-1194801504
Alral
2007-11-11 20:18
2007.12.09
TCPServer


2-1195033055
webpauk
2007-11-14 12:37
2007.12.09
Добавление в таблицу


4-1179699489
DmitrichJ
2007-05-21 02:18
2007.12.09
RichEdit20A. Как взять текст?


2-1194893371
alikon1
2007-11-12 21:49
2007.12.09
Выравнивание текста, моргающий курсор





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский