在DateTimePicker1和DateTimePicker2里分别填如两个日期 如何计算出这两个日期之间有多少个工作日(周六周日剔除)?
解决方案 »
- 双击ADOConnection控件,点build...按钮 提示“找不到指定模块”
- 哪里有rave报表开发教程?
- ¥☆求救高手帮忙~~~!!关于delphi响应flash事件的相关问题~!!!?
- 三层开发中,中间层有一存储过程,他接受输入、输出参数,请问怎样写.
- 请教一个极简单的问题:ADO怎么和带密码的ACCESS数据库相联,不用DSN的方式,
- 如何删除字符串中的一部分字符串?
- 请大家帮忙介绍一下操作注册表的API函数
- 有着样的要求,请大家看看
- 关于数据库查询结果显示问题???
- 如何知道用sql语句的无返加结果集的那些命令......
- 最菜鸟的数组方面的问题~!!
- 跪求财务软件中的记账凭证输入控件?
再配上两个是日期间有几个星期(函数不记得了),不就可以解决了!
可以考虑把DaysBetween 得出的(数字/7)*2应该就是双休日数.不过要考虑下开始是星期几和结束是星期几的话那样算不太准哦..
var
temp1:Tdatetime;
i:integer;
begin
temp1:=form1.DateTimePicker1.date;
i:=0;
while temp1<=form1.DateTimePicker2.Date do begin
case dayofweek(temp1) of
1:i:=i; //'星期天';
2:i:=i+1; //'星期一';
3:i:=i+1; //'星期二';
4:i:=i+1; //'星期三';
5:i:=i+1; //'星期四';
6:i:=i+1; //'星期五';
7:i:=i; //'星期六';
end;//end case
temp1:=temp1+1;
end;//end while
showmessage(floattostr(i));
end;
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;
mStartDate: TDate; //开始日期
mEndDate: TDate //终止日期
): Integer; //返回两个日期间的工作日,如果输入错误则返回-1
var m,n:integer;
begin
m:=DaysBetween(mStartDate,mEndDate);
n:=(m div 7)*2;
if DayOfWeek(mStartDate)>DayOfWeek(mEndDate) then
begin
n:=n+2;
if DayOfWeek(mStartDate)=1 then n:=n+1;
if DayOfWeek(mEndDate)=1 then n:=n-1;
if DayOfWeek(mEndDate)=7 then n:=n-1;
end;
result:=m-n;
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;
WorkDays:integer;
Delta1:integer;
i:integer;
begin
WorkDays:= WeeksBetween(Date1,Date2)*5; //一个星期有5天工作日,先算整周的。
Delta1:=Trunc(Date1)+WeeksBetween(Date1,Date2)*7; //剩下最后的几天
for i:=Delta1 to Trunc(Date2) do //循环判断
begin
if (DayOfWeek(i)>1) and (DayOfWeek(i)<7) then //如果是星期一到星期五就加一个工作日
Inc(WorkDays);
end;
Result:=WorkDays;以上经过测试!!!