首页  编辑  

两个日期之间有多少个工作日

Tags: /超级猛料/Date.Time.时间和日期/   Date Created:

计算两个日期之间的工作日天数

// 参考如下代码

function WorksDay( //计算两个日期间有多少个工作日

 mStartDate: TDate; //开始日期

 mEndDate: TDate //终止日期

): Integer; //返回两个日期间的工作日,如果输入错误则返回-1

var

 vDaySpace: Integer;

 I: Integer;

begin

 Result := -1;

 if mEndDate < mStartDate then Exit;

 vDaySpace := Trunc(mEndDate) - Trunc(mStartDate) + 1;

 Result := vDaySpace div 7 * 5; //计算有多少个星期,每个星期5个工作日

 for I := 0 to vDaySpace mod 7 - 1 do //加上剩余天数中的工作日

   Result := Result + Ord(DayOfWeek(mStartDate + I) in [2..6]);

end; { WorksDay }

procedure TForm1.Button1Click(Sender: TObject);

begin

 Edit1.Text := IntToStr(WorksDay(DateTimePicker1.Date, DateTimePicker2.Date));

end;

function WorksDay( //计算两个日期间有多少个工作日

 mStartDate: TDate; //开始日期

 mEndDate: TDate //终止日期

): Integer; //返回两个日期间的工作日,如果输入错误则返回-1

var m,n:integer;

begin

 Result := -1;

 if mEndDate < mStartDate then Exit;

 m:=DaysBetween(mStartDate,mEndDate);

 n:=(m div 7)*2;

 if  m mod 7<>0 then

 begin

   if DayOfWeek(mStartDate)>DayOfWeek(mEndDate) then n:=n+2;

   if DayOfWeek(mStartDate)=1 then n:=n+1;

   if DayOfWeek(mEndDate)=1 then n:=n-1;

 end;

 result:=m-n;

end;

当然也可以采用扫描天数,判断星期的方法,不过效率就低了。