Получить дату через заданное количество месяцев
- Подробности
- Категория: 1C8.3
- Опубликовано 24.05.2024 14:01
- Автор: Super User
- Просмотров: 243
Понадобилась функция - получить дату через заданное количество месяцев. В результате мучений сделал так. Корректно отрабатывает даты в високосный год.
&НаСервере
Функция ПолучитьДатуЧерезЗаданноеКоличествоМесяцев(НачальнаяДата, КоличествоМесяцев) Экспорт // Определение количества дней в дате через КоличествоМесяцев
ДеньМесяца = День(НачальнаяДата); // Количество дней с начала месяца до начальной даты
НачальныйМесяц = Месяц(НачальнаяДата);
НачальныйГод = Год(НачальнаяДата);
ОбщееКоличествоМесяцев = НачальныйМесяц + КоличествоМесяцев;
Если ОбщееКоличествоМесяцев >= 12 Тогда // переходит на следующий год
КонечныйМесяц = ?(ОбщееКоличествоМесяцев%12 = 0, ОбщееКоличествоМесяцев, ОбщееКоличествоМесяцев%12);
КонечныйГод = НачальныйГод +(ОбщееКоличествоМесяцев-КонечныйМесяц)/12;
КонечнаяДата = Дата(КонечныйГод, КонечныйМесяц, 1, 0, 0, 0) + ДеньМесяца * 86400 - 86400; // Первый день тоже учитываем, поэтому отнимем один день
Иначе // В пределах одного года
КонечныйМесяц = НачальныйМесяц + КоличествоМесяцев;
КонечныйГод = НачальныйГод;
КонечнаяДата = Дата(КонечныйГод, ОбщееКоличествоМесяцев, 1 ,0 ,0 ,0) + ДеньМесяца * 86400 - 86400; // Первый день тоже учитываем, поэтому отнимем один день
КонецЕсли;
Возврат КонечнаяДата;
КонецФункции