计算两个日期之间的工作日天数
// 参考如下代码
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;
当然也可以采用扫描天数,判断星期的方法,不过效率就低了。