Имя: Пароль:
1C
 
Разность дат! Как посчитать разность дат и вывести значение в месяцах?
0 DDD2006
 
21.12.06
11:00
Пусть будет Дата1 = 01.01.2006
и Дата2 = 07.03.2007
Как посчитать разность дат и вывести значение в месяцах?

Срок = Дата2 - Дата1 = 15
1 Obed
 
21.12.06
11:01
подели на 30
2 DDD2006
 
21.12.06
11:02
Если ввожу срок Конец=ДобавитьМесяц(Начало,Срок) то все ОК, а вот как вычислить разность чтобы срок получился?
3 Каанкереде
 
21.12.06
11:03
ДатаМесяц(Дата2)-ДатаМесяц(Дата1)
4 Obed
 
21.12.06
11:05
(3) а если год разный?
5 Каанкереде
 
21.12.06
11:07
+(ДатаГод(Дата2)-ДатаГод(Дата1))*12
6 DDD2006
 
21.12.06
11:12
(5) Либо не понял
"Окончание действия: "+(ДатаМесяц(Конец)-ДатаМесяц(НАчало)+(ДатаГод(Конец)+ДатаГод(Начало)*12))
7 DDD2006
 
21.12.06
11:13
но сумма больно бешанная
8 Vovik
 
21.12.06
11:22
(6)+ на - перепутал, внимательнее переписывай
9 Vovik
 
21.12.06
11:23
(6)+ на - перепутал. Внимательнее надо
10 Obed
 
21.12.06
11:26
сделай проще
Срок=Цел((Дата2-Дата1)/30 + 1)
11 Vovik
 
21.12.06
11:30
(10)Посчитай разницу по своей формуле между 01/12 и 31/12
12 Vovik
 
21.12.06
11:31
+11 если я не ошибаюсь 2 месяца
13 SerG82
 
21.12.06
11:38
Конец=ДобавитьМесяц(Начало,-Срок) со знаком минус
14 Рупор абсурда
 
21.12.06
11:39
15 Obed
 
21.12.06
12:02
(11) ну эт легко подправить :)
16 ЕжикТопатун
 
21.12.06
12:24

   Если КонДата>НачДата Тогда
       
       ВременнаяДата = КонДата;
       
       // если число конечной даты меньше начальной
       Если ДатаЧисло(КонДата) < ДатаЧисло(НачДата) Тогда
           Дней            = КонДата - ДобавитьМесяц(КонДата,-1);
           ВременнаяДата    = ДобавитьМесяц(КонДата,-1);
       КонецЕсли;
       
       // если месяц конечной даты, меньше месяца начальной, т.е. другого года
       Если ДатаМесяц(ВременнаяДата) < ДатаМесяц(НачДата) Тогда
           ВременнаяДата    = ДобавитьМесяц(ВременнаяДата,-12);
           Месяцев            = 12;
       КонецЕсли;
       
       Лет        = Макс(             ДатаГод  (ВременнаяДата)-ДатаГод  (НачДата),0);
       Месяцев    = Макс(Месяцев    +ДатаМесяц(ВременнаяДата)-ДатаМесяц(НачДата),0);
       Дней    = Макс(Дней        +ДатаЧисло(ВременнаяДата)-ДатаЧисло(НачДата),0);
       
       // скорректируем отображаемое значение, если "вмешалось" разное количество дней в месяцах
       Если НачДата <> (ДобавитьМесяц(КонДата,-Лет*12-Месяцев)-Дней) Тогда
           Дней = Дней + (КонМесяца(НачДата)-НачМесяца(НачДата)) - (КонМесяца(ДобавитьМесяц(КонДата,-1))-НачМесяца(ДобавитьМесяц(КонДата,-1)));
       КонецЕсли;
       
   КонецЕсли;
17 ЕжикТопатун
 
21.12.06
12:25
+(16) Еще посмотрите в ЗиК глРазобратьРазностьДат
там такие штуки практикуются...
18 Эрнст
 
21.12.06
12:27
глянь в глобальный модуль ,может пригодится процедурка глРазобратьРазностьДат(Дата1,Дата2,Лет,месяцев,дней)
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан