OpenForm
SDKPrimitives

duration

Last updated on

Build and validate ISO 8601 durations

Build and validate time durations in ISO 8601 format. The Duration primitive represents spans of time like "1 year, 6 months" or "2 hours, 30 minutes".

Examples

Creating durations

// Direct validation
const period = open.duration('P1Y6M')  // 1 year, 6 months
const hours = open.duration('PT2H30M') // 2 hours, 30 minutes

Parsing external data

// Parse unknown input (throws on error)
const period = open.duration.parse(jsonData)

// Safe parsing (returns result object)
const result = open.duration.safeParse(jsonData)
if (result.success) {
  console.log(`Duration: ${result.data}`)
} else {
  console.error(result.error.message)
}

Using with forms

const form = open.form({
  name: 'subscription',
  fields: {
    term: { type: 'duration', label: 'Subscription Term' }
  }
})

const filled = form.fill({
  fields: {
    term: open.duration('P1Y')  // 1 year
  }
})

API

Direct Call

open.duration(input: Duration): Duration

Pass a duration string for validation. Returns the validated string or throws on error.

const period = open.duration('P6M')  // 6 months

Static Methods

parse: (input: unknown) => Duration
Parse unknown input (throws on error)
safeParse: (input: unknown) => Result<Duration>
Parse unknown input (returns result object)

Format

The Duration primitive uses ISO 8601 duration format:

P[n]Y[n]M[n]DT[n]H[n]M[n]S
ComponentDescriptionExample
PPeriod designator (required)P
[n]YYears1Y
[n]MMonths6M
[n]DDays15D
TTime designatorT
[n]HHours2H
[n]MMinutes30M
[n]SSeconds45S

Common Examples

DurationMeaning
P1Y1 year
P6M6 months
P1Y6M1 year, 6 months
P30D30 days
PT2H2 hours
PT30M30 minutes
PT2H30M2 hours, 30 minutes
P1DT12H1 day, 12 hours

Validation

The Duration primitive validates:

  • String must start with P
  • At least one component must be specified
  • Components must be in correct order (Y, M, D, then T, H, M, S)
  • Time components must follow T designator
// Valid
open.duration('P1Y')
open.duration('P1Y6M')
open.duration('P1Y6M15D')
open.duration('PT2H30M')
open.duration('P1DT12H')
open.duration('P0D')  // Zero duration

// Invalid - throws Error
open.duration('1Y')
// Error: Invalid Duration: must start with P

open.duration('P')
// Error: Invalid Duration: must specify at least one component

open.duration('P2H')
// Error: Invalid Duration: time components must follow T

open.duration('PT1Y')
// Error: Invalid Duration: years cannot follow T designator

Related

On this page