Показать сообщение отдельно
Старый 06.01.2009, 17:11   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Gustav Посмотреть сообщение
Никто и не предлагает этим заниматься.
Ок. Я неправильно выразился.
Получать число месяцев из функции, которая тратит время и на расчет числа дней...
Это тоже изврат. Хотя и не такой, как расчет через цикл.

Что касается расчета месяцев...
Там предлагается:
X++:
ms = ( year(dtEnd) * 12 + mthOfYr(dtEnd) )
   - ( year(dtBeg) * 12 + mthOfYr(dtBeg) ); // предварительная разница в месяцах
Мне кажется, что мой код будет выполняться чуть быстрее, поскольку умножение выполняется только один раз.

Другое дело, что там учитываются полные месяцы.
Т.е. тот алгоритм выдаст 0 полных месяцев для дат 21.01.09, 18.08.09 (день месяца даты начала больше дня месяца даты окончания), а мой алгоритм выдаст 1 месяц.

Но если надо учитывать полные месяцы, то опять же лучше избегать вычисления разницы между датами. сделать так:
X++:
{
   Date dateFrom = 01\06\1995;
   Date dateTo = 01\04\2008;
   int years = year(dateTo) - year(dateFrom);
   int month = mthofyr(DateTo) - mthofYr(dateFrom);
   int month_correction = dayofmth(DateFrom) > dayofmth(DateTo) ? sign(DateFrom - DateTo) : 0;

   return ((years * 12) + month + month_correction;
}
__________________
полезное на axForum, github, vk, coub.