Функция определения - рабочий ли день

Автор:KaMPiLeR
Дата:17.08.2007
Просмотров:4961
Скачиваний:854
Оценка:, Оценок - 11
Скачать (rar-файл; Размер - 1271)

Обсудить в форуме

Описание

Функция определения - рабочий ли день через список с инвертированными праздничными днями через хэш.

идея такая - если выходной день выпадает на пн-пт, то заносим его в хэш.
если сб или вс объявлен рабочим - то тоже добавляем.
создается инвертированный список.

где пригодится - сами знаете

Текст примера

 if(evd_is_workday(date(31,1,2011))
  [#]
  (последний день месяца - рабочий);
end;

// если добавить эти функции - то можно вычислить рабочий день например на конец вклада
dt={curdate}+91;//вклад на 91 день
msgbox(evd_ymd_next_work(dt));

macro evd_ymd_prev(d,n)
  if(valtype(n)==V_UNDEF)
    n=1;
  end;
  return(d-n);
end;

macro evd_ymd_next(d,n)
  if(valtype(n)==V_UNDEF)
    n=1;
  end;
  return(d+n);
end;
macro evd_ymd_prev_work(d,n)
  var k=0;
  if(valtype(d)==V_UNDEF)
    d={curdate};
  end;
  if(valtype(n)==V_UNDEF)
    n=1;
  end;
  while(k<n)
    d=evd_ymd_prev(d);
    if(evd_is_workday(d)) k=k+1; end;
  end;
  return(d);
end;
macro evd_ymd_next_work(d,n)
  var k=0;
  if(valtype(d)==V_UNDEF)
    d={curdate};
  end;
  if(valtype(n)==V_UNDEF)
    n=1;
  end;
  while(k<n)
    d=evd_ymd_next(d);
    if(evd_is_workday(d)) k=k+1; end;
  end;
  return(d);
end;