如果在程序里面做到根据现在日期自动计算剩余日期。就是说,现在比如我现在的一个报建登记项目:
要登记一条工程申请记录,其中有一个字段是申请日期,就是登记我记录的那天日期,程序要求是,必须在登记那天起,工作日内7天完成审批,就是显示“剩余时间x天",但我怎样完成这点? 工作日内7天,就是节假日(星期六日,五一,国庆,元旦等)不算,就是即使跨过这些节假日,也不算7天内。我该怎样做?
要登记一条工程申请记录,其中有一个字段是申请日期,就是登记我记录的那天日期,程序要求是,必须在登记那天起,工作日内7天完成审批,就是显示“剩余时间x天",但我怎样完成这点? 工作日内7天,就是节假日(星期六日,五一,国庆,元旦等)不算,就是即使跨过这些节假日,也不算7天内。我该怎样做?
y=7-x;
if y>0 then
显示剩余时间y天
是的就不加,直到当前日为止。
哈哈,办法虽然不好但应该可以吧,仅供参考!^_^
申请日期+7-date=剩余天数,
绝对准确
然后就可以显示了
用delphi的函数DayOfWeekShortName来判断是否礼拜六或日在判断是否固定假日就可以了
1、六、日为非工作
2、固定节日(阳历)
3、非固定节日(像春节这种)
4、假日调整成工作日,像碰到国庆节,五一节这种情况,有时连六、日都被调整成工作日。至于判别我觉得如果判断六、日像DayOfTheWeek()这个比较符合中国人的习惯。
最好能够动态设置一下,做死在程序里不是很好,因为象五一的假期不一定每年都是从1-7号放假的。另外,Dayoftheweek()怎样用?
const
sWeek: array[1..7] of string = ('0', '1', '2', '3', '4', '5',
'6');
var
iWeek: Word;
begin
iWeek := DayOfWeek(ThisNow);
Result := sWeek[iWeek];
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s, e, i : integer;
ts : TTimeStamp;
d : tDate;
sts : TSQLTimeStamp;
days : integer;
begin
ts:=DateTimeToTimeStamp(datetimepicker1.DateTime);
s:=ts.Date;
ts:=DateTimeToTimeStamp(now);
e:=ts.Date;
days:=0;
for i:=s to e do begin
ts.Time:=0;
ts.Date:=i;
d:=timestamptodatetime(ts);
sts:=DateTimeToSQLTimeStamp(d);
if SQLDayOfWeek(sts) in [1, 7] then begin
// showmessage('休息日');
end
else begin
Inc(days);
// showmessage('工作日');
end;
if days>7 then begin
showmessage('超出7天。');
Exit;
end;
end;
showmessage('还剩'+IntToStr(7-days)+'天');
end;
而DayOfWeek()返回的值1~7则是对应星期日~星期一(是不是有点怪怪的:))
不过用DayOfTheWeek需要用到DateUtilsp这个单元。
至于你想怎么用就是你个人的爱好啦:)