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,'表示星期六与日是休息天。
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 我自己也写了下个更简单