Нашел таки, вот 2 функции из одного класса:
X++:
static str MydateDiff(transDate _d1, transDate _d2, boolean _include = False)
{
str _s;
int M_year, m_mth, m_days;
;
M_year = Global::yearDiff(_d2,_d1);
M_mth = mthofYr(_d2) - mthofYr(_d1);
if (M_mth < 0)
{
M_mth+=12;
}
M_days = DayOfmth(_d2) - DayOfmth(_d1);
if (M_days < 0)
{
M_mth--;
M_days += DayOfmth(dateEndMth(_d1));
}
if (_include) M_days++;
_s = strfmt("%1 %2 %3", PeriodInterval::PeriodSklInt(IntvScale::Year, M_year),
PeriodInterval::PeriodSklInt(IntvScale::Month, M_mth),
PeriodInterval::PeriodSklInt(IntvScale::Day, M_days) );
Return _s;
}
X++:
static Str PeriodSklInt(IntvScale: _Period, int _Count)
{ // возвращает строку "кол-во периодов"
str _s;
;
if (_Count)
{
if (_Count == 1)
{
switch (_Period)
{
case IntvScale::Day : _s = "день"; break;
case IntvScale::Week : _s = "неделя"; break;
case IntvScale::Month : _s = "месяц"; break;
case IntvScale::Quarter : _s = "квартал"; break;
case IntvScale:Year : _s = "год"; break;
default : _s = "период"; break;
}
}
else if ((_Count <= 4))
{
switch (_Period)
{
case IntvScale::Day : _s = "дня"; break;
case IntvScale::Week : _s = "недели"; break;
case IntvScale::Month : _s = "месяца"; break;
case IntvScale::Quarter : _s = "квартала"; break;
case IntvScale::Year : _s = "года"; break;
default : _s = "периода"; break;
}
}
else
{
switch (_Period)
{
case IntvScale::Day : _s = "дней"; break;
case IntvScale::Week : _s = "недель"; break;
case IntvScale::Month : _s = "месяцев"; break;
case IntvScale::Quarter : _s = "кварталов"; break;
case IntvScale::Year : _s = "лет"; break;
default : _s = "периодов"; break;
}
}
Return strfmt("%1 %2",_Count, _s);
}
else Return "";
}
}
C уважением, itfs.