Разность между датами в месяцах с десятичной долей

1. marshalbratsk 20.01.22 18:53 Сейчас в теме
Добрый вечер. Есть такой глупый вопрос, есть ли готовые функции которые вычисляют разность между двумя датами в месяцах с десятичной долей месяца?

Например разница между 15.01.22 и 04.04.22 будет равно ~2,7 месяца
С учетом того, что даты могут быть в разные годы

Изобретать велосипед неохота, уверен, что должны быть такие функции, но не нашёл
Найденные решения
3. d.batovskiy 21.01.22 09:17 Сейчас в теме
// Возвращает число календарных месяцев в периоде:
// 0 - если начальная дата строго больше конечной;
// 1 - если даты в одном календарном месяце.
Функция ЧислоКалендарныхМесяцевВПериоде(ДатаНач, ДатаКон) Экспорт
Если ДатаКон >= ДатаНач Тогда
Возврат (Год(ДатаКон)-Год(ДатаНач))*12 + Месяц(ДатаКон) - Месяц(ДатаНач) + 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ЧислоКалендарныхМесяцевВПериоде()

// Возвращает разность дат в месяцах (0 - если начальная дата больше или равна конечной).
Функция РазностьДатВМесяцахТочная(ДатаНач, ДатаКон) Экспорт
Если ДатаКон > ДатаНач Тогда
Возврат (КонецМесяца(ДатаНач)+1-ДатаНач) / (КонецМесяца(ДатаНач)+1-НачалоМесяца(ДатаНач))
+ (ЧислоКалендарныхМесяцевВПериоде(ДатаНач,ДатаКон) - 2)
+ (ДатаКон-НачалоМесяца(ДатаКон)) / (КонецМесяца(ДатаКон)+1-НачалоМесяца(ДатаКон));
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // РазностьДатВМесяцахТочная()
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. marshalbratsk 20.01.22 18:54 Сейчас в теме
Поправка, не делить тупо разность дат в секундах на 86400 и на 30, а именно с учетом того сколько дней в вычисляемом месяце
3. d.batovskiy 21.01.22 09:17 Сейчас в теме
// Возвращает число календарных месяцев в периоде:
// 0 - если начальная дата строго больше конечной;
// 1 - если даты в одном календарном месяце.
Функция ЧислоКалендарныхМесяцевВПериоде(ДатаНач, ДатаКон) Экспорт
Если ДатаКон >= ДатаНач Тогда
Возврат (Год(ДатаКон)-Год(ДатаНач))*12 + Месяц(ДатаКон) - Месяц(ДатаНач) + 1;
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // ЧислоКалендарныхМесяцевВПериоде()

// Возвращает разность дат в месяцах (0 - если начальная дата больше или равна конечной).
Функция РазностьДатВМесяцахТочная(ДатаНач, ДатаКон) Экспорт
Если ДатаКон > ДатаНач Тогда
Возврат (КонецМесяца(ДатаНач)+1-ДатаНач) / (КонецМесяца(ДатаНач)+1-НачалоМесяца(ДатаНач))
+ (ЧислоКалендарныхМесяцевВПериоде(ДатаНач,ДатаКон) - 2)
+ (ДатаКон-НачалоМесяца(ДатаКон)) / (КонецМесяца(ДатаКон)+1-НачалоМесяца(ДатаКон));
Иначе
Возврат 0;
КонецЕсли;
КонецФункции // РазностьДатВМесяцахТочная()
4. marshalbratsk 21.01.22 13:20 Сейчас в теме
(3) Отличная функция, как раз то, что нужно было, спасибо
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот