怎样计算以下两个日期工作日:(100分)

  • 主题发起人 主题发起人 comorange
  • 开始时间 开始时间
C

comorange

Unregistered / Unconfirmed
GUEST, unregistred user!
怎样计算以下两个日期工作日:
比如...我自己定义了一年每个日期,我用一个字段来标示每个日期是不是工作日!
----大虾门快帮忙啊,先谢了!
 
不太明白你的意思?是在数据库里计算还是在程序中计算?
 
这个很容易啊,假设你讲的是在DELPHI中,有函数DayOfWeek可以求出某年某月某天是星期几,然后与设定(比如根据需要可以设定星期六、天是休息日,也可以设定星期五六是休息日)相比较,就知道是不是了。 
 
要写在Delphi程序前台啊
麻烦 levi 写个代码!
 
首先,有周期性的东西,比如说一周休两天,在判断头,尾是否休息天之后,减去相关的天数,比如有一百四十天,那么是二十周,肯定有四十个休息日,如果头,尾周好是休息天,再处理一下.其次,减去包含在其中的法定休假日等等,
 
USES DateUtils
Function CompareDate(SetDate:TDate):Boolean;
var
tpDays:Integer;
tpStemp:Integer;
tpDate:TDate;
begin
Result := False;
if (VarisNull(SetDate)) or (SetDate = 0) then
Exit;
if utHintTime[tpIndex] > 0 then //>0表示当前日期之后,<0表示当前日期之前
tpStemp:=1
else
tpStemp:=-1;
tpDays:=Round(Abs(utHintTime[tpIndex]))
//* tpStemp;
tpDate:= SetDate;
while tpDays>0 do
if Pos(InttoStr(DayOfWeek(tpDate)),utHintExcept)>0 then //属于排除的休息日
tpDate:=IncDay(tpDate,tpStemp)
else
begin
tpDate:=IncDay(tpDate,tpStemp);
Dec(tpDays);
end;
if tpDate <= Date then
Result:= True;
end;
我这是从自己程序里面复制出来的代码,用于判断某个日期是不是在指定工作日之前或者之后的,返回值是布尔型,用于决定表格中的这行画什么颜色的。
其中utHintTime[tpIndex]保存的是大于0或者小于0的整数,大于0表示求之后日期(比如5,表示求当前日期后的5个工作日是哪天)。utHintExcept表示哪些天是休息日,值为 '6,7,'表示星期六与日是休息天。
 
已知2008-09-14是周日 你可以用任何一天和这天想减 等到的数mod7 就可以知道是周几
例如 StrToDate("2008-09-17")-StrToDate("2008-09-14")=3
3 mod 7=3 因此2008-09-17是周三
 
DayOfWeek可以的,要看下中西方的习惯,要不要减1,在去掉国家法定节日(这个比较麻烦,因为经常改变)
 
还忘记了法定节日跟周日重复 有节假日顺延的问题,越来越麻烦了
 
function UWorksDay(mStartDate: TDate
mEndDate: TDate
SBranch: string): Integer;
var
qryTemp: TBHDataSet;
begin
Result := -1;
if mEndDate < mEndDate then Exit;
qryTemp := TBHDataSet.Create(nil);
CommDataSetLocalize(qryTemp);
try
qryTemp.SQL.Clear;
qryTemp.SQL.Text := 'Select XXBZ From OA_KQDateSet Where KQDate>=' + QuotedStr(DateToStr(mStartDate)) +
' and KQDate<=' + QuotedStr(DateToStr(mEndDate)) + ' and XXBZ<>1 and BranchCode=' + QuotedStr(SBranch);
qryTemp.OpenData;
Result := qryTemp.RecordCount;
finally
FreeAndNil(qryTemp);
end;
end;
levi 我自己也写了下个更简单
 
还是要谢谢大家....
 
多人接受答案了。
 

Similar threads

回复
0
查看
1K
不得闲
回复
0
查看
848
不得闲
D
回复
0
查看
911
DelphiTeacher的专栏
D
后退
顶部