Форум: "Начинающим";
Текущий архив: 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