Epoch Batch Converter
Paste a list of Unix timestamps or date strings — one per line — and convert them all at once. Supports seconds, milliseconds and human-readable dates.
Why Every System Counts Time the Same Way
The Unix epoch — the count of seconds elapsed since January 1, 1970 00:00:00 UTC — dates back to early Unix systems that needed a compact, timezone-independent way to store a point in time as a single integer. That design choice turned out to scale remarkably well: because every epoch value is anchored to UTC, comparing two timestamps to determine which event happened first is just an integer comparison, with no timezone table or daylight-saving adjustment involved. That's exactly why it became the lingua franca of logs, databases, and APIs across completely unrelated tech stacks — a Go service, a Postgres column, and a JavaScript frontend can all agree on what a given epoch value means without any shared configuration.
The one wrinkle is precision: some ecosystems chose seconds, others chose milliseconds, and nothing enforces consistency between them. A 10-digit value is seconds; a 13-digit value is the same scale multiplied by 1000 for millisecond precision. Both are "the Unix epoch" — they just disagree on how finely to slice a second, which is the single most common source of the "why is this timestamp 1000x too large" confusion this tool is built to resolve at a glance.
When a Row Comes Back Invalid
The most common cause of an "Invalid" result is a value copied with surrounding text still attached — a database export that includes a trailing comma, or a log line pasted with a leading bracket or quote character still stuck to the number. Because each line is parsed independently, trimming the offending line usually fixes just that row without needing to reformat the whole batch. A second, sneakier cause is a timestamp that's actually correct but visually implausible: a 13-digit value being misread by eye as "way too large to be a real date" when it's simply millisecond precision rather than seconds — if a row resolves to a date centuries in the future, check whether it should have been divided by 1000 before being pasted in, or just paste it as-is and let the tool's digit-count detection handle the conversion.
A third failure mode is a date string in a locale-specific format the JavaScript engine's Date.parse() can't reliably interpret, such as day-first dates written as 15/01/2024 — this is genuinely ambiguous (day or month first?) and different browsers can parse it differently. Rewriting ambiguous dates in unambiguous ISO 8601 form (2024-01-15) before pasting removes the guesswork entirely.
Timestamps in Automated Pipelines
Bulk timestamp conversion shows up in infrastructure automation wherever a build or deploy pipeline needs to correlate events across systems that don't share a timezone or precision convention. A post-deploy verification step that pulls the last N log lines from three different services and needs to confirm they all happened within the same deployment window benefits from normalizing every timestamp to one format before comparing them, rather than eyeballing a mix of epoch-seconds application logs against ISO-8601 infrastructure logs. The same normalization logic used here — detect digit count, branch on seconds versus milliseconds, fall back to native date parsing — is exactly what a small Node or Python helper script would implement to do the same job unattended inside a CI job or a log-shipping pipeline.
Reconstructing an Incident Timeline
Picture pulling three timestamps from three different systems mid-incident — a load balancer log (seconds), a structured application log (milliseconds), and a third-party monitoring alert (ISO 8601):
1718700000
1718700123456
2024-06-18T09:32:15Z
Pasted together, the batch converter resolves all three to a common view: 1718700000 becomes 2024-06-18 09:00:00 UTC, 1718700123456 — correctly identified as milliseconds from its 13-digit length — becomes 2024-06-18 09:02:03 UTC, and the ISO string becomes 2024-06-18 09:32:15 UTC. Lined up together, it's immediately obvious the monitoring alert fired roughly 32 minutes after the load balancer event — a comparison that's easy to get wrong by hand under incident pressure when one value is in seconds and another in milliseconds and nobody has time to do the arithmetic mid-page.
Frequently Asked Questions
What timestamp formats does batch conversion support?
The tool auto-detects Unix timestamps in seconds (10 digits), Unix timestamps in milliseconds (13 digits), ISO 8601 date strings (such as 2024-01-15T10:30:00Z), and any human-readable date format that the browser's JavaScript engine can parse, including plain dates like "2024-01-15" and datetime strings like "2025-06-18 09:30:00". You can mix different formats freely in the same input — each line is parsed independently, and any line that cannot be interpreted is shown as "Invalid" in the output table.
Can I convert human-readable dates to Unix timestamps in bulk?
Yes. Paste any mix of human-readable dates, ISO 8601 strings, or existing Unix timestamps — one per line — and the tool converts all of them simultaneously. Each row in the output table shows the original input, the Unix epoch in seconds, the epoch in milliseconds, the full UTC date string, the ISO 8601 representation, and a relative time (such as "6 months ago"). The results can be exported as a CSV by clicking the Copy CSV button.
Why do some Unix timestamps have 10 digits and others 13 digits?
A 10-digit Unix timestamp represents seconds elapsed since the Unix epoch (January 1, 1970 00:00:00 UTC). A 13-digit timestamp represents the same point in time but in milliseconds — it is the second-precision value multiplied by 1000. Many modern programming languages and platforms default to millisecond precision: JavaScript's Date.now(), Java's System.currentTimeMillis(), and most database ORMs return 13-digit values. Older Unix system calls and shell tools like date +%s return 10-digit second-precision values. The batch converter detects which format is in use based on digit count, so both can appear in the same input without configuration.