Цитата:
Сообщение от
mazzy
Но если надо учитывать полные месяцы, то опять же лучше избегать вычисления разницы между датами. сделать так:
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;
}
А блин... В Аксапте sign какой-то странный. Он выдает только два значения +1 или -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 = (DateFrom == DateTo) ? 0 : (dayofmth(DateFrom) > dayofmth(DateTo) ? sign(DateFrom - DateTo) : 0);
return ((years * 12) + month + month_correction;
}