Показать сообщение отдельно
Старый 09.11.2006, 19:18   #5  
itfs is offline
itfs
Участник
 
277 / 43 (2) +++
Регистрация: 18.07.2005
Адрес: Moscow
Нашел таки, вот 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.
За это сообщение автора поблагодарили: gl00mie (1).