Цитата:
Сообщение от
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;
}