Time Inspector
Paste JSON, a MongoDB document, or an API response — every timestamp is annotated in place with a readable date, relative time, and sanity checks. The data itself is never modified.
No data leaves your browser — detection runs locally.
Reading the timestamps hiding in your data
Open almost any piece of developer data — an API response, a database record, a webhook payload — and you'll find dates stored as plain numbers like 1782558101. Computers love that format; people can't read it. To understand what actually happened, you end up copying numbers into a converter one at a time, trying to remember which field each result belonged to.
The Time Inspector reads the whole document at once. Every value that represents time — Unix timestamps in seconds, milliseconds, microseconds or nanoseconds, ISO 8601 strings, dates serialized as strings — gets a small annotation right next to it showing the readable date and how long ago (or from now) it is. Fields that aren't timestamps are left alone.
It also decodes the timestamps hiding inside identifiers: a MongoDB ObjectID, a UUID v7 (or the older v1/v6), and a ULID each embed their creation time, and a JWT carries its expiry. Each of those gets annotated too, with a link to the dedicated decoder if you want the full byte-by-byte breakdown.
Annotations are an overlay — your data stays intact
JSON famously has no comments, so a tool that writes explanations into your document would break it. The inspector never does: annotations are rendered on top of the document, like a heads-up display. Select the text and copy it — you get exactly the original values, valid and untouched. Click any annotation chip to open every format (UTC, your timezone, ISO 8601, Unix seconds and milliseconds), each one a click away from your clipboard.
When you do want the annotations as text, the Copy menu makes the trade-offs explicit: JSON with ISO dates converts the epochs into ISO 8601 strings and remains valid JSON — handy for test fixtures. JSONC with comments appends the annotations as // comments, the same not-quite-JSON format tsconfig.json uses. And the Markdown report produces a field-by-field table ready to paste into Slack or a pull request.
Sanity checks, not just conversion
Converting a timestamp is the easy part — the bugs live in the details around it. The inspector flags the patterns that a careful reviewer would catch: a deletedAt of 0 that renders as January 1970 (an unset value, not a real date), an expiry field that's already in the past, and the classic units bug where one field is in milliseconds while its siblings are in seconds — a mistake that makes dates land 50,000 years in the future and is surprisingly easy to miss in a wall of digits.
Field names are part of the analysis. A key named ttl, timeout, or expires_in holds a duration, so its value is shown as “1 hour” rather than misread as a 1970 date — a distinction most converters get wrong.
With two or more timestamps detected, a proportional timeline appears below the document showing the sequence and the gaps between events — and Send to Compare hands the detected fields to the comparison tool for labeled deltas you can share.
Frequently asked questions
Why does a timestamp show January 1, 1970?
January 1, 1970 (UTC) is "time zero" for Unix timestamps — the epoch. When a field like deletedAt holds 0, it almost never means the event happened in 1970; it means the value was never set and a zero default leaked through. The inspector flags these so you don't mistake an empty field for a real date.
How does it tell seconds from milliseconds?
By digit count. A present-day timestamp is 10 digits in seconds, 13 in milliseconds, 16 in microseconds, and 19 in nanoseconds, so the length of the number reveals the unit. The inspector also cross-checks fields against each other: if one field looks like milliseconds while every other timestamp in the document is in seconds, it flags a likely units bug.
Is my data uploaded anywhere?
No. Parsing and detection run entirely in your browser — nothing you paste is sent to a server, and unlike our other tools, this page deliberately never puts your document in the URL either, since pasted API responses often contain sensitive data.
JSON doesn't support comments — how can I copy the annotated version?
The annotations you see on screen are an overlay, not text: selecting and copying the document gives you the original, valid JSON with no comments in it. If you want the annotations as text, the Copy menu offers two explicit choices: "JSON with ISO dates" replaces the numeric epochs with ISO 8601 strings and stays valid JSON, while "JSONC with comments" appends // annotations — the format used by tsconfig.json and VS Code settings, which most tools accept but strict JSON parsers do not.
Can I paste MongoDB shell output or a JavaScript object?
Yes. MongoDB wrappers like ISODate("…"), ObjectId("…"), and NumberLong(…) are normalized automatically, and the parser also accepts JavaScript object literals — unquoted keys, single-quoted strings, trailing commas, and comments — so output copied from a browser console or a code file works as-is.
Why is my ttl or timeout field shown as a duration instead of a date?
Field names carry meaning. A value like 3600 under a key named ttl, timeout, or expires_in is a length of time (one hour), not a point in time — reading it as a timestamp would put it in January 1970. The inspector uses the key name to pick the right interpretation, including unit suffixes like timeoutMs or maxAgeDays.
What does a warning chip mean?
The inspector runs a few sanity checks a reviewer would: a zero epoch usually means an unset value, an expiry field whose date is already in the past means the token or session is expired, and a field whose unit disagrees with the rest of the document is the classic seconds-vs-milliseconds bug. Click the chip to see the full explanation.
Can I compare the timestamps it found?
Yes — "Send to Compare" loads every detected plain timestamp into the Compare Timestamps tool with its field path as the label, where you can see time gaps between events, sort chronologically, and share the comparison via URL.