又找了一些资料,好象没有发现现成的或可以简化过程的东东,于是写了下面这样的一个自定义函数true_age()返回实际年龄。另一个自定义函数month_day()得到当年某月是多少天。
btw:这里是我的程序中出现的一段代码,计算某人出生那天起到现在实际年龄是多少的。没想出更好的算法,还请高手指教。
====================================================================
Private Function true_age(olddate As Date) As String
Dim oldday As Integer
Dim oldmonth As Integer
Dim oldyear As Integer
Dim trueyear As Integer
Dim truemonth As Integer
Dim trueday As Integer
Dim inty As Integer
Dim intm As Integer
Dim intd As Integer
oldyear = CInt(Year(olddate))
oldmonth = CInt(Month(olddate))
oldday = CInt(Day(olddate))
trueyear = CInt(Year(Now))
truemonth = CInt(Month(Now))
trueday = CInt(Day(Now))
If CInt(DateDiff("d", olddate, Now)) < 0 Then
MsgBox "当前日期或出生年月有误。", vbInformation, "提示"
true_age = "日期有误"
Else
If (oldmonth <= truemonth And oldday <= trueday) Then
inty = trueyear - oldyear
intm = truemonth - oldmonth
intd = trueday - oldday
End If
If (oldmonth = truemonth And oldday > trueday) Then
inty = trueyear - oldyear - 1
intm = 0
intd = month_day(oldmonth) + trueday - oldday
End If
If (oldmonth < truemonth And oldday > trueday) Then
inty = trueyear - oldyear
intm = truemonth - oldmonth - 1
intd = month_day(oldmonth) + trueday - oldday
End If
If (oldmonth >= truemonth And oldday > trueday) Then
inty = trueyear - oldyear - 1
intm = 12 + truemonth - oldmonth - 1
intd = month_day(oldmonth) + trueday - oldday
End If
If (oldmonth > truemonth And oldday <= trueday) Then
inty = trueyear - oldyear - 1
intm = 12 + truemonth - oldmonth
intd = trueday - oldday
End If
If inty = 0 And intm = 0 And intd = 0 Then true_age = "刚出生"
If inty = 0 And intm = 0 And intd > 0 Then true_age = intd & "天"
If inty = 0 And intm > 0 And intd = 0 Then true_age = intm & "个月"
If inty = 0 And intm > 0 And intd > 0 Then true_age = intm & "个月零" & intd & "天"
If inty > 0 And intm = 0 And intd = 0 Then true_age = inty & "岁整"
If inty > 0 And intm = 0 And intd > 0 Then true_age = inty & "岁零" & intd & "天"
If inty > 0 And intm > 0 And intd = 0 Then true_age = inty & "岁零" & intm & "个月"
If inty > 0 And intm > 0 And intd > 0 Then true_age = inty & "岁零" & intm & "个月零" & intd & "天"
End If
End Function
'-------------------------------------------------------------------
'计算当年某月天数。主函数引用。
Private Function month_day(whichmonth As Integer) As Integer
Dim month_2 As Integer
If (Year(Now) Mod 4 = 0 And Year(Now) Mod 100 <> 0) Or Year(Now) Mod 400 = 0 Then '闰年
month_2 = 29
Else '平年
month_2 = 28
End If
Select Case whichmonth
Case 1, 3, 5, 7, 8, 10, 12
month_day = 31
Case 2
month_day = month_2
Case Else
month_day = 30
End Select
End Function
====================================================================