计算年龄函数(精确到天数)

shaken 2005-04-02 03:22:03
以下是我写的函数体:
var
vAges : string;//返回结果
prmt_Ages : string ;//参数
begin
prmt_Ages := '2005-02-1';
if YearsBetween(now,strToDate(prmt_Ages))=0 then
begin
if MonthsBetween(now,strToDate(prmt_Ages))=0 then
vAges := IntToStr(DaysBetween(now-2,strToDate(prmt_Ages)))+ '天'
else begin
vAges :=IntToStr(MonthsBetween(now,strToDate(prmt_Ages)))+'月';
end;
end
else begin
vAges := IntToStr(YearsBetween(now,strToDate(prmt_Ages)))+'岁';
end;

这个函数可以计算出大于一岁的和小于一个月的精确年龄,但是对于大于一个月小于一年的年龄没有办法精确到【天】这个单位,只能计算出几个月。不知道各位有没有办法帮忙改一下。
...全文
882 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
shaken 2005-04-21
  • 打赏
  • 举报
回复
to XuDunYu(西门吹雪)
什么意思?不是很明白你说的?
ppayun 2005-04-21
  • 打赏
  • 举报
回复
先把这两个日期转为TDateTime型,假设为date1,date2
分别取年月日,标记为Y1,M1,D1, Y2,M2,D2
if D1<D2 then begin
day := DaysInMonth(date1)+D1-D2;
M1 := M1-1;
end
else day := D1-D2;

if M1<M2 then begin
month := M1+12-M2;
Y1=Y1-1;
end
else month := M1-M2;

year := Y1-Y2;

这个应该就是平时大家说的几岁几月的年龄了
Henry.6 2005-04-21
  • 打赏
  • 举报
回复
这样看来你没有说清楚你的题目。。。
XuDunYu 2005-04-20
  • 打赏
  • 举报
回复
楼主是否想用年、月、日来表示年龄
XuDunYu 2005-04-20
  • 打赏
  • 举报
回复
daysbetween不可以吗?
cyf_delphi 2005-04-20
  • 打赏
  • 举报
回复
帮顶
shaken 2005-04-20
  • 打赏
  • 举报
回复
对不起,你给我的答复不符合要求,我没有办法结贴,不过,谢谢你的帮忙, 6rl(海)
Henry.6 2005-04-04
  • 打赏
  • 举报
回复
去掉inDaysOfMonth : Integer;
Henry.6 2005-04-04
  • 打赏
  • 举报
回复
Function TForm1.DaysInMonth(date:tdatetime):word;
VAR
YEAR,MONTH,DAY:WORD;
DAYTABLE:TDAYTABLE ;
begin
DECODEDATE(DATE,YEAR,MONTH,DAY);
DAYTABLE:=MONTHDAYS[ISLEAPYEAR(YEAR)];
result:=daytable[month];
end;

procedure TForm1.Button1Click(Sender: TObject);
var
vAges : string;//返回结果
prmt_Ages : string ;//参数
dtAges : TDateTime;
dtNow : TDateTime;
iaDaysOfMonth : Integer;
inDaysOfMonth : Integer;
nYEAR,nMONTH,nDAY : WORD;
aYEAR,aMONTH,aDAY : WORD;
begin
prmt_Ages := '2005-02-21';
dtAges := strToDate(prmt_Ages);
DECODEDATE(dtAges,aYEAR,aMONTH,aDAY);
iaDaysOfMonth := DaysInMonth(dtAges);
dtNow := Now;
DECODEDATE(dtNow,nYEAR,nMONTH,nDAY);

if YearsBetween(now,strToDate(prmt_Ages))=0 then
begin
if MonthsBetween(now,strToDate(prmt_Ages))=0 then
vAges := IntToStr(DaysBetween(now,strToDate(prmt_Ages)))+ '天'//为什么now-2???
else begin
vAges :=IntToStr(MonthsBetween(now,strToDate(prmt_Ages)))+'月';
if(iaDaysOfMonth - aDAY + nDAY) > iaDaysOfMonth then
vAges := vAges + IntToStr(nDAY - aDAY)+ '天'
else if (iaDaysOfMonth - aDAY + nDAY) < iaDaysOfMonth then
vAges := vAges + IntToStr(iaDaysOfMonth - aDAY + nDAY)+ '天';
end;
end
else begin
vAges := IntToStr(YearsBetween(now,strToDate(prmt_Ages)))+'岁';
vAges := vAges + IntToStr(MonthsBetween(now,strToDate(prmt_Ages))-YearsBetween(now,strToDate(prmt_Ages))*12)+'月';

end;
ShowMessage(vAges);
end;
shaken 2005-04-03
  • 打赏
  • 举报
回复
没有人继续回答这个问题吗?帮顶有分。
shaken 2005-04-02
  • 打赏
  • 举报
回复
通常会说几岁零几个月或几岁零几天。
这不是通常的问题,而是实际应用需要。
Henry.6 2005-04-02
  • 打赏
  • 举报
回复
说错了
通常会说几岁零几个月或几岁零几天。

procedure TForm1.Button1Click(Sender: TObject);
var
vAges : string;//返回结果
prmt_Ages : string ;//参数
begin
prmt_Ages := '2004-02-1';
if YearsBetween(now,strToDate(prmt_Ages))=0 then
begin
if MonthsBetween(now,strToDate(prmt_Ages))=0 then
vAges := IntToStr(DaysBetween(now-2,strToDate(prmt_Ages)))+ '天'
else begin
vAges :=IntToStr(MonthsBetween(now,strToDate(prmt_Ages)))+'月';
end;
end
else begin
vAges := IntToStr(YearsBetween(now,strToDate(prmt_Ages)))+'岁';
vAges := vAges + IntToStr(MonthsBetween(now,strToDate(prmt_Ages))-YearsBetween(now,strToDate(prmt_Ages))*12)+'月';

end;
ShowMessage(vAges);
end;

end.
Henry.6 2005-04-02
  • 打赏
  • 举报
回复
从逻辑上来说你的一个月算几天啊(没定数)

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧