Консультация № 172533
23.09.2009, 15:50
0.00 руб.
0 4 2
Уважаемые Эксперты!
Подскажите, как вычислить разницу между датами в рабочих днях?
Имеется массив выходных и праздничных дней в году.
Как сделать чтобы при вычислении учитывались даты из массива (исключались из вычисления).
Заранее благногдарен
Al_Sha

Обсуждение

Неизвестный
23.09.2009, 16:06
общий
это ответ
Здравствуйте, Al_Sha.
Определяемпервя дата DtTm1: integer, и вторая дата DtTm2.
Опредлеяем DtTmLen := abs (DtTm2-DtTm1);
Проверям каждой елементьи из масива выходных и праздничных дней в году находятся между DtTm1 и DtTm2.
Каждой раз, когда дата из масива находятся между DtTm1 и DtTm2 делам dec( DtTmLen);

Заб. Ползуем функцию:
function EncodeDate(Year, Month, Day: Word): TDateTime;

5
Неизвестный
23.09.2009, 16:51
общий
1. В каком формате представлены данные в массиве
2. Учитываются ли крайние даты
Неизвестный
23.09.2009, 18:24
общий
А можно, я еще уточню задачу...
Имеем исходную дату, к ней надо прибавить 10 РАБОЧИХ дней.
Массив выходных и праздничных дней - формат String ('01.02.2009'), а наверно надо в формате datetime.

>Проверям каждой елементьи из масива выходных и праздничных дней в году находятся между DtTm1 и DtTm2.
>Каждой раз, когда дата из масива находятся между DtTm1 и DtTm2 делам dec( DtTmLen
А как это сделать, я в общем-то не силен :(

> Заб. Ползуем функцию:
>function EncodeDate(Year, Month, Day: Word): TDateTime;
Для чего ?

Крайние даты учитываются
Неизвестный
24.09.2009, 08:43
общий
это ответ
Здравствуйте, Al_Sha.
Предлагаю Вам свой вариант решения.
На Форме:
Edit1 - для ввода исходной даты
Edit2 - для вывода результата
Button1 - кнопка запуска расчета
Полный код и описание в приложениию
При вводе исходной даты 01.03.2009 результат 14.03.2009.
Удачи.

Приложение:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
function IsHolyday(date_:TDate):boolean;
private
{ Private declarations }
public
{ Public declarations }
end;

const
holiday : array[0..2] of string = ('03.03.2009', '05.03.2009', '08.03.2009'); {тестовый массив выходных дней}
kol: integer = 10; {количество прибавляемых дней}

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
dt1, dt2: TDate;
i: integer;

begin
try
dt1:= StrToDate(Edit1.Text); {исходная дата}
except
exit;
end;
dt2:= dt1;

i:= 1;
while i <= kol do
begin
dt2:= dt2 + 1; {прибавляем по 1-му дню}
if IsHolyday(dt2) then i:= i-1; {проверяем выходной или нет, если выходной, то уменьшаем счетчик}
Inc(i); {увеличение счетчика}
end;
Edit2.Text:= DateToStr(dt2); {вывод результата}
end;

function TForm1.IsHolyday(date_:TDate):boolean; {функция определения вых. дня}
var
temp: boolean;
i: integer;
begin
temp:= False;
for i:= 0 to Length(holiday)-1 do
if StrToDate(holiday[i]) = date_ then temp:= True;
IsHolyday:= temp;
end;

end.
5
Прибавляю ++<br>СПАСИБО БОЛЬШОЕ....
Форма ответа