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

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.7 MB
Время: 0.037 c
6-1175434020
Lyberzon
2007-04-01 17:27
2007.12.09
Как отправить на печать документ из TWebBrowser?


8-1170612314
Master_
2007-02-04 21:05
2007.12.09
Как узнать имя кодека, которым сжат видеофайл


4-1178109791
TV
2007-05-02 16:43
2007.12.09
И снова RS232


2-1194938145
Layner
2007-11-13 10:15
2007.12.09
DBGrid, 8 знаков после запятой, как?


3-1185982794
StriderMan
2007-08-01 19:39
2007.12.09
TIBValidationService