Цитата:
Сообщение от
mazzy
А блин... В Аксапте 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;
}
а вот с оптимизацией производительности
X++:
{
Date dateFrom = 01\06\1995;
Date dateTo = 01\04\2008;
int years;
int month;
int month_correction;
if(DateFrom == DateTo)
return 0;
years = year(dateTo) - year(dateFrom);
month = mthofyr(DateTo) - mthofYr(dateFrom);
month_correction = dayofmth(DateFrom) > dayofmth(DateTo) ? sign(DateFrom - DateTo) : 0;
return ((years * 12) + month + month_correction;
}