如果在程序里面做到根据现在日期自动计算剩余日期。就是说,现在比如我现在的一个报建登记项目:
要登记一条工程申请记录,其中有一个字段是申请日期,就是登记我记录的那天日期,程序要求是,必须在登记那天起,工作日内7天完成审批,就是显示“剩余时间x天",但我怎样完成这点? 工作日内7天,就是节假日(星期六日,五一,国庆,元旦等)不算,就是即使跨过这些节假日,也不算7天内。我该怎样做?

解决方案 »

  1.   

    从登记日期开始,到当天,逐天判断是否为工作日,是X加一,
    y=7-x;  
    if y>0 then 
     显示剩余时间y天
      

  2.   

    可以用ini文件暂存,即保存申请日期,然后从申请日开始算,不是节假日的就加一
    是的就不加,直到当前日为止。
    哈哈,办法虽然不好但应该可以吧,仅供参考!^_^
      

  3.   

    噢,你可以这样的:
    申请日期+7-date=剩余天数,
    绝对准确
    然后就可以显示了
      

  4.   

    楼上说用ini的想法好用简单又好用
      

  5.   

    那比如国庆有7天假期,如何跳过去呢?用ini可行,但因为我那是客户端程序,拿到另一地方,如果没有了那个ini文件,那不是失效了?
      

  6.   

    Drate(鸟窝里的虫) 的方法应该可以
      

  7.   

    哥们,你的程序可以实现,不过考虑的东西挺多,比如说现在五一、十一的调假,单位的调假,就不能用简单的方法来判断当前天是不是工作日了?这样的话就需要建立一个假期表了,不过如果是简单的程序就没有必要了,只要判断是不是固定假期和礼拜六或日就可以了
    用delphi的函数DayOfWeekShortName来判断是否礼拜六或日在判断是否固定假日就可以了
      

  8.   

    其实如果是工作日的话,要考虑的事倒是有几条
    1、六、日为非工作
    2、固定节日(阳历)
    3、非固定节日(像春节这种)
    4、假日调整成工作日,像碰到国庆节,五一节这种情况,有时连六、日都被调整成工作日。至于判别我觉得如果判断六、日像DayOfTheWeek()这个比较符合中国人的习惯。
      

  9.   

    是的,五一和国庆很多时候都把上个星期六日或下个星期六日的假期连在一起放,这意味着那两天可能也是工作日。
    最好能够动态设置一下,做死在程序里不是很好,因为象五一的假期不一定每年都是从1-7号放假的。另外,Dayoftheweek()怎样用?
      

  10.   

    DayOfWeek的用法看看這個function GetCWeek(ThisNow: TDateTime): string;
    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;
      

  11.   

    没有考虑五一、十一、元旦、春节,自己加上很简单,对了要uses单元SqlTimSt
    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;
      

  12.   

    DayOfTheWeek()返回的值1-7对应星期一~星期日
    而DayOfWeek()返回的值1~7则是对应星期日~星期一(是不是有点怪怪的:))
    不过用DayOfTheWeek需要用到DateUtilsp这个单元。
    至于你想怎么用就是你个人的爱好啦:)
      

  13.   

    原先做ERP的时候也遇到这样过厂历转公历的问题。当时我们的解决办法的,专门建立了一个数据库,允许用户修改那些的节假日!