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 ; 21dWhere
| Production | Meaning |
|---|---|
< | The real age was less than the provided age |
> | The real age was greater than the provided age |
years | a number of years |
months | a number of months |
weeks | a number of weeks |
days | a 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.