🠕

2.6 Age

Ages are represented by counts of years, months, weeks, and days.

Age         = [[ageBound D] ageDuration]

ageBound    = "<" / ">"
ageDuration = years [D months] [D weeks] [D days]
            / months [D weeks] [D days]
            / weeks [D days]
            / days

years   = Integer %x79    ; 35y
months  = Integer %x6D    ; 11m
weeks   = Integer %x77    ; 8w
days    = Integer %x64    ; 21d

Where

ProductionMeaning
<The real age was less than the provided age
>The real age was greater than the provided age
yearsa number of years
monthsa number of months
weeksa number of weeks
daysa number of days

Non-integer numbers should be rounded down to an integer. Thus, if someone has lived for 363.5 days, their age might be written as 363d, 51w 6d, 51w, 0y, etc.

Because numbers are rounded down, > effectively includes its endpoint; that is, the age > 8d includes people who have lived 8 days + a few seconds.

Different cultures count ages differently. Some increment years on the anniversary of birth and others at particular seasons. Some round to the nearest year, others round years down, others round years up. Because users may be unaware of these traditions or may fail to convert them to the round-down convention, errors in age of up to a year are common.

Because age payloads are intended to allow recording the age as it was recorded in records that could contain errors, odd ages such as 8w 30d, 1y 400d, 1y 30m, etc. are permitted. Some applications might convert these to more standard forms; if so, it is recommended that they use a PHRASE substructure to hold the original form.

Age payloads may also be omitted entirely if no suitable form is known but a substructure (such as a PHRASE) is desired.

Versions 5.5 and 5.5.1 allowed a few specific phrases inside Age payloads. Age phrases were moved to the PHRASE substructure in 7.0.

The URI for the Age data type is g7:type-Age.