关于日期计算(50分)

  • 主题发起人 主题发起人 xiao_ping
  • 开始时间 开始时间
X

xiao_ping

Unregistered / Unconfirmed
GUEST, unregistred user!
[?]计算两日期之间相差多天,可用Trunc(date2-data1) 来实现,但如何将这个数转换为
n年n月n日,如果用 Trunc(date2-date1) div 365 来取年,用(Trunc(date2-date1) mod 365) div 30
来取月会有误差,因为一每年的天数和每月的天数是不固定的。那位朋友有更好的方法?
 
差值出来后,加上一个固定日期[如 1年1月1日]不就得到了新的日期,
呵呵,别忘了减去相应的天数哦[如 1年1月1日 应该是 365+31+1吧]
 
我觉得既然每一年的天数不同,那我们要考虑的不是具体的天数,那就不必先减得到
日期,就应考虑先得到年之差,再是月之差,最后是日之差!我编过此类程序,回头再
传上来
 
delphi_lsl说得有些道理,但应该是先得到日,再得到月,最后得年,用不着date1-date2了。
 
;Datediff(day,Newdate,Olddate) as validday
Newdata=原时间
Olddate=以前时间
validday=得的相差天数;套到你的SQL语句里去,一切OK
我拿它来算食品有效期,绝对OK
拿分来
 
嘿嘿,不对
你想想 1999年10,24 与2002年5月5日差几年几月几天
 
我现在使用一个简单的例子:
procedure TForm1.Button1Click(Sender: TObject);
var
; MyDate: TDateTime;
begin
;//Edit1.Text 表示年,Edit2.Text 表示月,Edit3.Text表示日;
; MyDate := EncodeDate(StrToInt(Edit1.Text), StrToInt(Edit2.Text), StrToInt(Edit3.Text));
; Label1.Caption := DateToStr(MyDate);
end;
按照相同的方法可以取得两个日期,然后将两个日期相减就可以得到两个日期相隔多少天.
 
to menxin:
天数都求出来了!!!!!
年份、月份只是普通数学加减问题,也可用DECODEDATE函数求出年月的
这你都不会!!!还搞什么DELPHI!!!
 
是呀
DECODEDATE
 
呵呵,好,那我问你731天是几年几个月又零几天呢?

我没说解决这个问题有多么困难,只不过提醒各位一个。就算你知道,也不至于这么激动吧。
 
to menxin:
; 就此打住,都是DFW
; 731天有开始日期,怎么就算不出呢?没开始日期你算出来又有啥意义呢?
 
谁说算不出了
 
我试了几个没什么问题,自己慢慢验证吧。确实很简单,DELPHI的时间函数很丰富。

uses dateutils,math;

procedure TForm1.Button1Click(Sender: TObject);
var
; Date1,Date2:TDate;
; r1,r2,r3:integer;
begin
; Date1:=Min(DateTimePicker1.date,DateTimePicker2.date);
; Date2:=Max(DateTimePicker1.date,DateTimePicker2.date);
; r1:=YearsBetween(Date1,Date2);
; r2:=MonthsBetween(Date1,Date2)-r1*12;
; r3:=DayOf(Date2)-DayOf(Date1) +IfThen(DayOf(Date1)<=DayOf(Date2),0,DaysInMonth(StartOfTheMonth(Date2)-1));
; ShowMessage(Format('两个日期相差%d年%d个月%d天',[r1,r2,r3]));
end;
 
接受答案!
 

Similar threads

D
回复
0
查看
926
DelphiTeacher的专栏
D
D
回复
0
查看
880
DelphiTeacher的专栏
D
D
回复
0
查看
853
DelphiTeacher的专栏
D
后退
顶部