收费中滞纳金的实现,可以按天收也可以按月收,假设按天收,超期一天,收取总金额的千分之一作为滞纳金,如按月设置,超期一月,收取总金额的百分之二作为滞纳金,数据库为access,请问,超过的天数或月数应该怎么得到呢,时间格式的字段可以直接相减得到吗?如可以的话,天数相减比较容易得到,月数应如何得到呢?查找需收取滞纳金的记录时,select语句中,where 后设置条件为应交费日期<当前日期,这样能实现吗?俺是初学,请帮帮忙!

解决方案 »

  1.   

    可以直接相减,得到的整数部分是天数,小数部分是时间
    月份也可以得到,如果你用的是SQL Server的话,函数DateDiff专门处理这方面的东西的
    如果不是的,可以考虑以下算法:
    提取年月日,然后再运算
      

  2.   

    你可以用以下的方法实现
      将两个日期格式格式化为到月为止,然后比较得到的两个字符串,如果不等,则通过系统的比较月的函数来得到月,当然也可以通过系统的月累加的函数来,肯定可以得到月的。
       如果相等,那么就直接相减以后用floor函数取整数部分
      

  3.   

    以下偶写的一个以月为单位来得到的cirlevalue个月以前的日期我想可能对你有所帮助,供你参考:
    //nowtime:Tdatetime;
    //cirlevalue:INTEGR;为月数
    var  
     lyear,lmonth:integer;
      lastyear,lastmonth,lastday:integer;
      days:integer;
    begin
                lyear:=cirlevalue div 12;
                lmonth:=cirlevalue mod 12;
                if (monthof(nowtime)-lmonth)>0 then
                    lastyear:=yearof(nowtime)-lyear
                else
                    lastyear:=yearof(nowtime)-lyear-1;
                lastmonth:=(monthof(nowtime)-lmonth+12)mod 12;
                days:=daysofmonth(lastyear,lastmonth);
                if dayof(nowtime)>days then lastday:=days
                else
                   lastday:=dayof(nowtime);
                result:=strtodatetime(inttostr(lastyear)+'-'+inttostr(lastmonth)+'-'+inttostr(lastday));
              end;