fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Timestamps, Time Zones, Calendars, and Observation Time

Install and import#

bash
npm install fintech-algorithms
ts
import { timestampsTimeZonesCalendarsAndObservationTime } from "fintech-algorithms/foundations/data-variables-samples-and-measurement/timestamps-time-zones-calendars-and-observation-time";

Signature#

timestampsTimeZonesCalendarsAndObservationTime(input)

Audits a table's timestamps: whether the rows arrive in chronological order, whether every stamp carries a zone, and which rows sit at the two ends of the span.

Parameters#

NameTypeNotes
inputD00InputA plain object. Every F03 topic first reads rows, which must be a non-empty array of row objects, and derives the sorted union of every key seen across them before any per-topic branch runs. This topic reads each row's timestamp field, parsed as a date string, and reads no other keys.

Returns#

{ ordered: boolean; timezoneAware: boolean; first: string; last: string }

ordered is true when no row's timestamp precedes the one before it. timezoneAware is true only when every timestamp ends in a Z or an explicit numeric offset. first and last are the raw timestamp strings of the earliest and latest rows.

Errors#

  • When input is not a plain object — throws TypeError
  • When rows is missing, empty, or not an array — throws RangeError

Complexity: time O(r * c), space O(r * c).

Worked example#

verified This is the worked example published in the article, replayed by the test suite on every run. The output cannot drift.

Input#

input
{
  "rows": [
    {
      "entity": "A",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 10,
      "rating": "low"
    },
    {
      "entity": "A",
      "timestamp": "2025-01-02T00:00:00Z",
      "value": null,
      "rating": "medium",
      "censored": true
    },
    {
      "entity": "B",
      "timestamp": "2025-01-01T00:00:00Z",
      "value": 12,
      "rating": "high"
    }
  ],
  "ordinalColumns": ["rating"],
  "populationSize": 100,
  "frameSize": 80,
  "keyColumns": ["entity", "timestamp"],
  "truncationRule": "values below 5 excluded",
  "measurements": [9.9, 10, 10.1, 10],
  "referenceValue": 10,
  "vintages": [
    {
      "availableAt": "2025-02-01T00:00:00Z",
      "value": 100
    },
    {
      "availableAt": "2025-03-01T00:00:00Z",
      "value": 102
    },
    {
      "availableAt": "2025-04-01T00:00:00Z",
      "value": 101
    }
  ],
  "asOf": "2025-03-15T00:00:00Z",
  "provenance": {
    "source": "teaching.csv",
    "owner": "Fintech Builder",
    "license": "CC-BY-4.0",
    "retrievedAt": "2026-08-10",
    "transformations": ["parse", "validate"]
  }
}

Call#

timestampsTimeZonesCalendarsAndObservationTime(input)

Returns#

object with 2 fields: ordered, timezoneAware

{
  "ordered": false,
  "timezoneAware": true
}

Diagrams#

Timestamps, Time Zones, Calendars, and Observation Time — article hero
Timestamps, Time Zones, Calendars, and Observation Time — concept anatomy
Timestamps, Time Zones, Calendars, and Observation Time — mistake contrast
Timestamps, Time Zones, Calendars, and Observation Time — teaching map

How it works#

This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.

Read the article →

References#

  • Theory and Naming
  • Time Series and Date Functionality
  • Evidence boundary

The rest of the Data, Variables, Samples, and Measurement family#