← Diggwigs field notes

A timestamp without a unit is only half a value

A release log contains 1767225600. A teammate pastes it into a date constructor and sees January 1970. The event was recorded in seconds, while the constructor expected milliseconds. The digits were correct; the contract was missing.

Run the same digits with two units

Open Timestamp Explorer. Choose UTC, enter the value below, and explicitly select Seconds.

Input: 1767225600
Unit: Seconds
Timezone: UTC

The expected outputs all describe one instant:

ISO 8601: 2026-01-01T00:00:00.000Z
Unix seconds: 1767225600
Unix milliseconds: 1767225600000

Keep the same input and change the unit to Milliseconds. The expected ISO output becomes:

1970-01-21T10:53:45.600Z

Both results are valid dates. A plausible result cannot tell you which unit the producer intended. Digit counting is a heuristic, not a schema.

Normalize once, then derive every output

Diggwigs uses milliseconds from the Unix epoch as its base value. It derives the displayed date, ISO string, seconds, and milliseconds together. Seconds accept up to three fractional digits; milliseconds must be integers. A value outside the supported date range produces an error instead of a partial result.

Input: -0.001 seconds
Expected milliseconds: -1
Expected ISO: 1969-12-31T23:59:59.999Z

Timezone changes the label, not the instant

Choose Local device timezone to see your system’s representation. The ISO output remains UTC and the epoch value remains unchanged. A calendar date is different: it must first be interpreted in the selected timezone to become an instant.

A daylight-saving transition can skip or repeat a local time. Nonexistent local times are rejected. For a repeated time, the browser chooses the earlier occurrence. Use UTC or an explicit offset in your data exchange when this distinction matters.

Put the unit in the field name, schema, or API contract. created_at_ms is more useful than a promise to guess later.

Diggwigs field notes pair a concrete input with its expected output. Run the examples in the local workspace and inspect the boundary for yourself.