比如两个yyyy-mm-dd形式的日期:1999-2-28 ,2000-3-5,有没有什么函数支持直接计算?还是需要将日期拆分之后自己程序手动计算?

解决方案 »

  1.   

    有,不过只有delphi6和以上的版本才支持。
      

  2.   

    有~~~FAINT说说是那一个啊,急啊,谢谢
      

  3.   

    在dateutils单元中有,DaysBetween(const ANow, AThen: TDateTime):integer
      

  4.   

    直接转换成日期型就可以了啊
    var
      Day1,Day2:TDateTime;
    begin
      Day1 := StrToDate('2003-03-05');
      Day2 := StrToDate('1999-02-28');
      showmmessage('两个日期差为'+FormatFloat('0',Day1-Day2));
    end;
      

  5.   

    hehe,我也是刚知道有,谢谢楼上。
      

  6.   

    大哥说笑吧,既然能用两个日期行相减那DELPHI中还提供函数干什么啊?斑竹啊,我记不清了,但我可以告诉你在哪查。在DELPHI6实务经典的最后几页中介绍了关于DELPHI6中的日期行的所有函数,你可以到那里面去看。
      

  7.   

    没有说笑,如果是天数就是直接相减,稍微有一点点研究精神,OK?TDateTime不过是个双精度浮点数,整数部分记录日期,小数部分记录时间,那做为日期数据最小单位的天数的差自然可以通过相减得出.封装成函数只是为了提高代码的可维护性和可读性.VCL中这种实现这种简单功能的函数多的是.
      

  8.   

    没错,我试验了。  aimin(天剑) 和 niat97222(Freeman)的方法都正确。
    我还特意挑了个闰年算的,一点问题都没有。
    其实看看DaysBetween(const ANow, AThen: TDateTime):integer;的源码,就是niat97222(Freeman)说得算法。不得不佩服vcl的强大,像这种例子多得是,strtoint('$F2BC45')就可以巧妙的实现数制转换。
      

  9.   

    先转换成TDATETIME类型,再相减
      

  10.   

    daysbetween 函数返回的是两个日期之间相差的整数天数,当其差值小于一天时将返回0值,所以楼主如果要得到的是具体的时间差;恐怕还要再自己另外写函数才行;^_^
      

  11.   

    其实直接用2个时期减就行了。如果你做成函数封装的话。
    function a(Day1 :TDateTime,Day2 : TDateTime);
    var
      Day1,Day2:TDateTime;
    begin
      Day1 := StrToDate('2003-03-05');
      Day2 := StrToDate('1999-02-28');
      return (Day1-Day2);
    end;
      

  12.   

    错了错了。是:
    function a(Day1 :TDateTime,Day2 : TDateTime);
    var
      Day1,Day2:TDateTime;
    begin
      return (Day1-Day2);
    end;