09.11.2006, 19:18 | #11 |
Участник
|
Нашел таки, вот 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 ""; } } |
|
|
За это сообщение автора поблагодарили: gl00mie (1). |