даты 1с77

lira89

Well-known member
12.03.2010
154
0
#1
Есть две даты ДатаНачала и ДатаКонца. Надо посчитать количество месяцев между ними. Когда просто делаешь вычитание ДатаКонца-ДатаНачала, то в результате получаем количество дней, а нужно количество месяцев. Подскажите, может есть метод или надо как-то по-другому?
 

vbs

Well-known member
18.02.2007
1 708
1
#2
Если особая точность не нужна, раздели на 30. В противном случае используй ДатаМесяц и ДатаЧисло
 
T

TimeDontWait

#3
Есть фукнция для этого с типовой конфы:
Код:
Процедура глРазобратьРазностьДат(Знач Дата1,Знач Дата2,Лет=0,Месяцев=0,Дней=0) Экспорт
Лет = 0; Месяцев = 0; Дней = 0;
Если Дата1>Дата2 Тогда

ВременнаяДата = Дата1;
Если ДатаЧисло(ВременнаяДата)<ДатаЧисло(Дата2) Тогда
Дней = ВременнаяДата-ДобавитьМесяц(ВременнаяДата,-1);
ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-1);
КонецЕсли;
Если ДатаМесяц(ВременнаяДата)<ДатаМесяц(Дата2) Тогда
ВременнаяДата = ДобавитьМесяц(ВременнаяДата,-12);
Месяцев = 12;
КонецЕсли;
Лет		= Макс(			 ДатаГод (ВременнаяДата)-ДатаГод (Дата2),0);
Месяцев	= Макс(Месяцев	+ДатаМесяц(ВременнаяДата)-ДатаМесяц(Дата2),0);
Дней	= Макс(Дней		+ДатаЧисло(ВременнаяДата)-ДатаЧисло(Дата2),0);

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

КонецФункции
 

olga13

Well-known member
10.10.2008
208
0
#4
Я считаю так:

КолМес = (ДатаМесяц(ВыбКонПериода) - ДатаМесяц(ВыбНачПериода)) + (ДатаГод(ВыбКонПериода) - ДатаГод(ВыбНачПериода)) * 12 + 1;