The latest version of the specification is version v2.


A period of time conforming to the subset of ISO8601 time intervals as follows:

period =  start-end / start-duration / duration-end / duration
start-end = datetime "/" datetime
start-duration = datetime "/" duration
duration-end = duration "/" datetime

Where datetime is a datetime datatype and duration is a duration.

The following examples are all valid Period values:



A duration of time conforming to ISO8601. A duration is an abstract period of time so its length will depend on an starting or ending point in time.

duration = "P" date / "P" "T" time / "P" date "T" time
date     = years [months] [days] / [years] months [days] / [years] [months] days
time     = hours [minutes] [seconds] / hours minutes [seconds] / [hours] [minutes] seconds

years    = non-zero "Y"
months   = non-zero "M"
days     = non-zero "D"
hours    = non-zero "H"
minutes  = non-zero "M"
seconds  = digit "S"

digit    = "0" / non-zero
non-zero = "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"

The expression PT0S is the only one allowed when expressing an empty duration.

This specification chooses not to allow any fractional component in the smallest time atom.

For example, a duration such as:


Is of length of one month. “Month” is an abstract concept with multiple possible lengths. To make the length concrete you need a period of time:

2018-01-01/P1M  -- 31 days
2018-02-01/P1M  -- 28 days

© Crown copyright released under the Open Government Licence.