10.11.2006, 12:09 | #9 |
Участник
|
Цитата:
X++: // возвращает строку "кол-во периодов" static str PeriodSklInt(IntvScale _period, int _count) { str _s; ; if (!_count) return ""; if (_count < 0) _count = -_count; if ((_count mod 100<10 || _count mod 100>20) && _count mod 10==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 mod 100<10 || _count mod 100>20) && _count mod 10>1 && _count mod 10<=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); } X++: static str myDateDiff(date _d1, date _d2, boolean _include = false) { date m_d1, m_d2; // m_d2 >= m_d1 str _s; int m_year, m_mth, m_days; ; if(_d1<_d2) { m_d1 = _d1; m_d2 = _d2; } else { m_d1 = _d2; m_d2 = _d1; } m_year = yearDiff(m_d2,m_d1); m_mth = mthOfYr(m_d2) - mthOfYr(m_d1); if (m_mth < 0) m_mth += 12; m_days = dayOfMth(m_d2) - dayOfMth(m_d1); if (m_days < 0) { m_mth--; m_days += dayOfMth(dateEndMth(m_d1)); } if (m_mth < 0) m_mth += 12; if (_include) m_days++; if (m_days == dayOfMth(dateEndMth(m_d2))) { m_mth++; m_days = 0; } _s = strltrim(strrtrim(strfmt("%1 %2 %3", PeriodSklInt(IntvScale::Year, m_year), PeriodSklInt(IntvScale::Month, m_mth), PeriodSklInt(IntvScale::Day, m_days)))); return _s; } X++: info("distance is " + myDateDiff(10\09\2005, 01\10\2006)); info("distance is " + myDateDiff(10\10\2005, 09\10\2006)); info("distance is " + myDateDiff(31\01\2005, 29\04\2006)); info("distance is " + myDateDiff(31\01\2005, 30\04\2006)); info("distance is " + myDateDiff(31\01\2005, 01\05\2006)); info('---------------------------'); info("distance is " + myDateDiff(31\01\2004, 27\02\2004)); info("distance is " + myDateDiff(31\01\2004, 28\02\2004)); info("distance is " + myDateDiff(31\01\2004, 29\02\2004)); info("distance is " + myDateDiff(31\01\2004, 01\03\2004)); PHP код:
Последний раз редактировалось gl00mie; 10.11.2006 в 12:20. |
|
|
За это сообщение автора поблагодарили: itfs (1). |