Отнять/прибавть к Дате квоДней

 
Как по нормальному раюотать с датой ? Нужна функция ОтнятьОтДаты некоторое количество дней.
Сейчас я делаю это так (очень неудобно) :

datetime ОтнятьОтДаты(datetime ВыбДата,int КвоДней)
{
datetime ВремДата,Дата;
int i,j,x;
int НачБар,КонБар;
datetime ИскДата;

x = КвоДней;

НачБар = iBarShift( NULL , 0, ВыбДата);
//Comment("Для Даты =",ВыбДата, " Смещение равно = ",НачБар);
for(j=НачБар;j<Bars;j++)
{
ВремДата = StrToTime(TimeToStr(Time[j],TIME_DATE));
if (ВремДата!=ВыбДата)
{
x = x - 1;
ВыбДата = ВремДата;
}
if (x == 0) break;
}

return(ВремДата);
}
 
Я использую такую функцию
//+------------------------------------------------------------------+
//| Уменьшение даты на один день                                     |
//| Параметры:                                                       |
//|   dt - дата торгового дня                                        |
//+------------------------------------------------------------------+
datetime decDateTradeDay (datetime dt) {
  int ty=TimeYear(dt);
  int tm=TimeMonth(dt);
  int td=TimeDay(dt);
  int th=TimeHour(dt);
  int ti=TimeMinute(dt);

  td--;
  if (td==0) {
    tm--;
    if (tm==0) {
      ty--;
      tm=12;
    }
    if (tm==1 || tm==3 || tm==5 || tm==7 || tm==8 || tm==10 || tm==12) td=31;
    if (tm==2) if (MathMod(ty, 4)==0) td=29; else td=28;
    if (tm==4 || tm==6 || tm==9 || tm==11) td=30;
  }
  return(StrToTime(ty+"."+tm+"."+td+" "+th+":"+ti));
}
 
Чем не устраивает "ВремДата = ВыбДата - КвоДней*24*60*60;" ?
Причина обращения: