设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2382|回复: 10
打印 上一主题 下一主题

[查询] 如何精确计算年龄?

[复制链接]
跳转到指定楼层
1#
发表于 2008-1-23 10:33:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2008-1-23 11:18:56 | 只看该作者
之前碰到过,得到的答案是西方算年的方法和我们的不一样导致的,2007-12-31与2008-1-1就是相差一年。

所以datediff函数当计算参数是year是,它只进行一个简单的减法运算,2008-1978=30
3#
发表于 2008-1-23 12:51:18 | 只看该作者
即然是精确计算,我想就没有太大的麻烦了吧,精确到日最简单.
年龄=(Date(Now())-Date(出年年月日)) \ 365
4#
发表于 2008-1-23 13:13:53 | 只看该作者
猫咪所说的计算公式应该是这样的吧 :年纪=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)))
5#
发表于 2008-1-23 14:43:48 | 只看该作者
学习,学习,再学习
6#
发表于 2008-1-23 15:24:46 | 只看该作者
是的,我那个忽略了闰年
7#
发表于 2008-1-23 16:28:25 | 只看该作者
=IIf(month(出生日期)>Month(Date()),Year(Date())-year(出生日期)-1,Year(Date())-year(出生日期))

上面的计算精确到月.
8#
 楼主| 发表于 2008-1-23 18:22:00 | 只看该作者

这两个计算都有问题啊:
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())))


[ 本帖最后由 sxgaobo 于 2008-1-23 18:23 编辑 ]

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
9#
发表于 2008-1-23 19:39:14 | 只看该作者
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
10#
发表于 2008-1-23 22:22:33 | 只看该作者
晕,当时没有测试确认过,漏了个小于号

年龄=DateDiff("yyyy",[出生日期],Date())-IIf(DatePart("d",[出生日期])-DatePart("d",Date())<=0,0,(DatePart("d",[出生日期])-DatePart("d",Date()))/Abs(DatePart("d",[出生日期])-DatePart("d",Date())))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-29 23:35 , Processed in 0.104029 second(s), 35 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表