Skip to content

EDTFSet

Represents "one of a set" of dates (Level 2).

Interface

typescript
interface EDTFSet extends EDTFBase {
  type: 'Set';
  values: (EDTFDate | EDTFDateTime | EDTFSeason)[];
  earlier?: boolean;
  later?: boolean;
}

Properties

PropertyTypeDescription
type'Set'Type discriminator
valuesArrayValues in the set
earlierboolean?True if set includes earlier dates
laterboolean?True if set includes later dates

Inherited from EDTFBase

PropertyTypeDescription
level2Always Level 2
edtfstringOriginal EDTF string
precisionPrecisionBased on set contents
minDateEarliest possible date
maxDateLatest possible date

Usage

Sets are enclosed in square brackets [] and represent "one of these":

typescript
import { parse, isEDTFSet } from '@edtf-ts/core';

const result = parse('[1667,1668,1670..1672]');

if (result.success && isEDTFSet(result.value)) {
  const set = result.value;

  console.log(set.values.length);  // Number of values in set
  for (const value of set.values) {
    console.log(value.edtf);
  }
}

Set Syntax

Simple Set

A comma-separated list of dates:

typescript
parse('[1667,1668,1669]');
// One of: 1667, 1668, or 1669

Set with Ranges

Use .. to specify ranges within a set:

typescript
parse('[1667,1668,1670..1672]');
// One of: 1667, 1668, 1670, 1671, or 1672

Earlier Values

Use .. at the start to include all earlier values:

typescript
parse('[..1760-12]');
// December 1760 or earlier
typescript
const result = parse('[..1760-12]');
if (result.success && isEDTFSet(result.value)) {
  console.log(result.value.earlier);  // true
}

Later Values

Use .. at the end to include all later values:

typescript
parse('[1760-12..]');
// December 1760 or later
typescript
const result = parse('[1760-12..]');
if (result.success && isEDTFSet(result.value)) {
  console.log(result.value.later);  // true
}

Examples

typescript
// Years
parse('[1667,1668,1669]');

// Months
parse('[2004-01,2004-02,2004-03]');

// Days
parse('[2004-06-01,2004-06-02,2004-06-03]');

// Mixed precision
parse('[1667,1668-12]');

// With ranges
parse('[1760..1765,1770]');

// Open-ended
parse('[..1760]');    // 1760 or earlier
parse('[1760..]');    // 1760 or later

Semantic Meaning

Sets express "one of" semantics:

typescript
const result = parse('[1667,1668,1669]');
// Meaning: The event occurred in ONE of 1667, 1668, or 1669
// (but we don't know which one)

This is different from Lists which express "all of" semantics.

Min/Max Bounds

The min and max properties span the entire set:

typescript
const result = parse('[1667,1668,1672]');
if (result.success) {
  console.log(result.value.min);  // 1667-01-01
  console.log(result.value.max);  // 1672-12-31
}

Type Guard

typescript
import { isEDTFSet } from '@edtf-ts/core';

const result = parse(input);
if (result.success && isEDTFSet(result.value)) {
  // TypeScript knows result.value is EDTFSet
  console.log(result.value.values);
}
  • EDTFList - "All of" semantics (curly braces)

Released under the MIT License.