比如'2003-01-01'和'2003-05-05'咋样设计含数可能得出任意两个日期的差值result := '相差 0年4月4天’?
请大家帮帮忙了,万分感谢

解决方案 »

  1.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
      d1,d2:TDateTime;
      result:String;
    begin
      d1:=StrToDateTime('2003-01-1');
      d2:=StrToDateTime('2003-05-05');
      Caption:=Format('%s-%s-%s',[inttostr( YearsBetween(d1,d2)),
                                  inttostr( MonthsBetween(d1,d2)),
                                  inttostr( daysBetween(d1,d2)mod 30)])//可能不准确,因为月不一定是30天,总的来讲,我认为你的表示是没有意义的
    end;
      

  2.   

    我的意思是这样。。出生年龄-死亡年龄=几岁几月几天死。
    然后要能根据这个结果进行排序
    我不知道应该把建立一个字段保存结果不是利用计算字段,,如果以字符字段来保存结果的
    话,就不能排序了如果用整型保存结果(daysbetween)的话用户查看就不够直观。。大家有什么好建议吗???请不吝赐教了
      

  3.   

    如果两个日期直接相减,得到的是它们相差的天数,不能达到你的要求.
    看看这样行不行?uses Controls,SysUtils,DateUtils;
    implementation
    function GapOfDay(Day1,Day2:TDate):string;
    begin
      result:= inttostr(YearsBetween(Day2,Day1))+'年'+
        inttostr(MonthsBetween(Day2,Day1))+'月'+
           inttostr(DaysBetween(Day2,Day1))+'日';
    end;
      

  4.   

    出生年龄-死亡年龄=几岁几月几天死?
    上面的是不是反了
    听起来象是为 殡仪馆 写东西一样那么直接用integer好了,最准确,排序也简单,显示出来可以直接转一下
    字符字段也是可以排序的
      

  5.   

    两个日期直接相减,得到的是它们相差的天数,再经过转换就可以了数据库使用DateTime字段
      

  6.   

    Caption:=Format('%s-%s-%s',[inttostr( YearsBetween(d1,d2)),
                                  inttostr( MonthsBetween(d1,d2)),
                                  inttostr( daysBetween(d1,d2)mod 30)])
    -----------
    上面的是错误的 
    年月 不管 mod多少都有问题
    --------
    强烈建议用integer
      

  7.   

    是EASY,EASY的没人会了。哈哈
      

  8.   

    这个问题其实用单纯的数值计算比较麻烦,我感觉还是自己控制一下进位比较好。可以年与年减,月与月减,天与天减。年之间的减法就没什么了,主要是月的和天的。不过首先有一个问题必须保障,就是第二个日期一定比第一个日期大!先判断一下,再做计算。
    Y1:=yearof(第一个日期); M1:=monthof(..).........
    第一个日期的年为Y1 第二个日期的年为Y2,相减年数为Y3  Y3:=Y2-Y1;
    第一个日期的月为M1 第二个日期的月为M2, 相减月数为M3    
    月的进制是12进制,
    如果第一个日期的月比第一个日期的月大的话,正常减.
    如果第二个日期的月比第一个日期的月小的话,比如 02-02-02 与05-01-01。这样的话可以把年与年的差值减去1,Y3:=Y3-1;  然后把第二个日期的月加上12。
    M2:=M2+12;
    再减去第一个日期的月  M3:=M2-M1;
    月的计算方法就是
    if m2>m1 then
      m3:=m2-m1
    else
    begin
      y3:=y3-1;
      m2:=m2+12;
      m3:=m2-m1;
    end;
    以上是月的计算方法。
    然后是天数的。也是减,不过要写一个CASE,因为每个月的天数不同,天数的问题比较头疼。因为天数没法计算,如果是02-01-03和05-02-01比较好算,按31天算了,不过如果是02-01-03和05-05-01,它的天数你按5月算还是1月算,还是2月,3月,4月的天数算呢?你定义一个规则才能写代码的。如果不让我写代码,我对于这个问题都不会算呢,因为每个人的计算方法不同。如果你选择了方法,无论是天数都为30天,或是按第一个日期的当月为准或是按第二个日期的前一个月为准,那这段代码就能写出来了,具体加点CASE就行了。兄弟天数的问题你写写吧。首先想想计算方法,我关注着:)写好了,麻烦把代码贴出来,让大家共享吧。