Пожалуйста, убедитесь, что вы понимаете, что вы получаете, когда используете этот метод для определения возраста человека.
DateDiff("yyyy",[DOB],Date())
Если DOB = # 1987-12-31 #, на сегодняшнюю дату (# 2011-6-16 #), DateDiff даст вам это как возраст:
? DateDiff("yyyy", #1987-12-31#, #2011-6-16#)
24
(И фактически для любого DOB в 1987 году DateDiff с сегодняшней датой даст вам «возраст» 24 года. Кроме того, для любого DOB в 1987 году, используя этот метод в любой день 2011 года, вы получите 24).
OTOH, как обычно понимают возраст, можно сказать: "Чепуха! Его день рождения еще более чем через 6 месяцев. Сегодня ему всего 23 года".
Причина такого расхождения заключается в том, что DateDiff("yyyy"
оценивает только компонент года двух дат. Рассмотрим эти две даты, которые разделены одним днем:
? DateDiff("yyyy",#2010-12-31#,#2011-1-1#)
1
То же самое происходит, когда вы используете это выражение для вычисления "возраста".
Чтобы вернуть возраст, как обычно понимается, вы можете использовать выражение, подобное этому:
? DateDiff("yyyy", #1987-12-31#, Date())+ _
Int( Format(Date(), "mmdd") < Format( #1987-12-31#, "mmdd"))
Я скопировал это выражение из Access Web: Рассчитать возраст человека . На этой странице представлены другие подходы для определения возраста.
Ничего из этого не имеет значения, если, очевидно, как и ОП, вы хотите, чтобы все DOB в 1987 году считались 24 годами сегодня или в любой день 2011 года.