Office中国论坛/Access中国论坛

标题: 如何精确计算年龄? [打印本页]

作者: sxgaobo    时间: 2008-1-23 10:33
标题: 如何精确计算年龄?
DateDiff("yyyy",[出生日期],Date())可以计算两日期间相差的年,
DateDiff("yyyy",[1978-1-22],[2008-1-22])=30 可 DateDiff("yyyy",[1978-1-25],Date())也=30
怎么可以精确的计算年龄啊,就是说[2008-1-22]-[1978-1-22]=30 而 [2008-1-22]-[1978-1-25]=29
作者: rjacky    时间: 2008-1-23 11:18
之前碰到过,得到的答案是西方算年的方法和我们的不一样导致的,2007-12-31与2008-1-1就是相差一年。

所以datediff函数当计算参数是year是,它只进行一个简单的减法运算,2008-1978=30
作者: 咱家是猫    时间: 2008-1-23 12:51
即然是精确计算,我想就没有太大的麻烦了吧,精确到日最简单.
年龄=(Date(Now())-Date(出年年月日)) \ 365
作者: rjacky    时间: 2008-1-23 13:13
猫咪所说的计算公式应该是这样的吧 :年纪=DateDiff("d",#1978-12-25#,Date())\365

由于有闰年的存在,这种算法和实际还是有出入的,例如某人2007-2-1出生, 到2009-1-31应该是还差一天才到2岁,而不是计算结果的2岁。

从严格的角度应该这样算的
年龄=DateDiff("yyyy", date1, date2) - IIf(DatePart("d", date1) - DatePart("d", date2) = 0, 0, (DatePart("d", date1) - DatePart("d", date2)) / Abs(DatePart("d", date1) - DatePart("d", date2)))
作者: wolfman    时间: 2008-1-23 14:43
学习,学习,再学习
作者: 咱家是猫    时间: 2008-1-23 15:24
是的,我那个忽略了闰年
作者: kangking    时间: 2008-1-23 16:28
=IIf(month(出生日期)>Month(Date()),Year(Date())-year(出生日期)-1,Year(Date())-year(出生日期))

上面的计算精确到月.
作者: sxgaobo    时间: 2008-1-23 18:22
[attach]28180[/attach]
这两个计算都有问题啊:
1: 年龄=Year(Date())-Year([出生日期])-IIf(Month(Date())<Month([出生日期]),1,IIf(Month(Date())=Month([出生日期]),Day(Date())<Day([出生日期]),0))
2: 年龄=DateDiff("yyyy",[出生日期],Date())-IIf(DatePart("d",[出生日期])-DatePart("d",Date())=0,0,(DatePart("d",[出生日期])-DatePart("d",Date()))/Abs(DatePart("d",[出生日期])-DatePart("d",Date())))
[attach]28181[/attach]

[ 本帖最后由 sxgaobo 于 2008-1-23 18:23 编辑 ]
作者: andymark    时间: 2008-1-23 19:39
try
Function IntYear(FirstDay As Date, LastYear As Date) As Integer
Dim IntTem As Integer
IntTem = Year(LastYear) - Year(FirstDay)
If DateAdd("yyyy", IntTem, FirstDay) > LastYear Then
  IntYear = IntTem - 1
  Else
  IntYear = IntTem
End If

End Function
作者: rjacky    时间: 2008-1-23 22:22
晕,当时没有测试确认过,漏了个小于号

年龄=DateDiff("yyyy",[出生日期],Date())-IIf(DatePart("d",[出生日期])-DatePart("d",Date())<=0,0,(DatePart("d",[出生日期])-DatePart("d",Date()))/Abs(DatePart("d",[出生日期])-DatePart("d",Date())))
作者: yygcyml    时间: 2008-2-26 16:02
太感谢各位了!




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3