Skip to content
epitometool

Epoch / Unix timestamp converter

Dev quality-of-life

Convert Unix epoch ↔ ISO 8601 / human dates with timezone support.

Updated

Current time

Now (epoch seconds)
Now (epoch ms)

Timezone

Epoch → Date

Paste a Unix timestamp. Seconds or milliseconds — we auto-detect.

Date → Epoch

Paste an ISO date, RFC date, or anything Date.parse understands.

Batch convert

One timestamp per line. Mix epochs and date strings — each is parsed independently.

Quick start

How to convert a Unix timestamp

Paste an epoch (seconds or milliseconds) or a date string and see the converted value — all in your browser.

  1. Step 1
    Pick a timezone

    We auto-detect your local timezone, but you can pick any IANA name (e.g. Europe/Berlin) for the human-readable output.

  2. Step 2
    Paste your timestamp

    Drop an epoch (10 or 13 digits) into the first box, or an ISO date into the second. The conversion runs live as you type.

  3. Step 3
    Batch convert if needed

    Need to convert many timestamps at once? Paste them line-by-line into the batch box — each is parsed independently.

In-depth guide

Unix epoch timestamps — the practical guide

If you've ever opened a log file and seen a 10-digit number where the date should be, you've met Unix epoch time. It's the lingua franca of computing — every modern system uses it under the hood — but it's not always obvious how to convert it back into a human date. This guide walks through what epoch time is, the seconds-vs-milliseconds gotcha, timezones, and the upcoming Year 2038 problem.

What is Unix epoch time?

It's a counter: the number of seconds elapsed since exactly midnight on the 1st of January 1970, in UTC. That moment is called the epoch. It was chosen by Ken Thompson and Dennis Ritchie when they were building the first Unix systems at Bell Labs in the early 1970s — they needed a simple integer to represent time, and "a few years before now" fit comfortably in a signed 32-bit integer.

Because it's UTC-anchored and timezone-free, two systems anywhere in the world will agree on what an epoch number means. It's only when you display it that timezone enters the picture.

Seconds vs milliseconds

Unix originally counted seconds. But modern programming languages (JavaScript, Java, .NET) defaulted to milliseconds when they were designed in the 1990s, because they needed sub-second precision for event timestamps. So you'll see two conventions in the wild:

  • 10 digits (e.g. 1 700 000 000) — seconds. Used by Unix tools, syslog, MySQL TIMESTAMP, JWT exp claims.
  • 13 digits (e.g. 1 700 000 000 000) — milliseconds. Used by Date.now() in JavaScript, System.currentTimeMillis() in Java, Postgres extract(epoch from … × 1000), Firestore Timestamps.

The cutoff is 10¹² (1 000 000 000 000). Anything bigger is definitely milliseconds — a 10¹² seconds value would be year 33658.

Timezones & DST

The epoch number itself doesn't care about timezones. The number 1 700 000 000 points to the same instant in Tokyo, London and New York — only the wall clock shows it differently.

This tool lets you pick the timezone the result is displayed in. By default it auto-detects yours via Intl.DateTimeFormat().resolvedOptions().timeZone, but you can type any IANA timezone name (e.g. Europe/Berlin, America/Argentina/Buenos_Aires) into the field.

Daylight saving time is handled automatically by the browser's Intl API — the same epoch can land at different wall-clock times depending on whether DST was in effect at that moment.

The Year 2038 problem

Embedded systems (industrial controllers, satellites, IoT firmware) are the main remaining 32-bit holdouts. A handful of high-profile fixes have already happened (Linux kernel 5.6+, glibc 2.34+) but the long tail will keep coming up between now and 2038.

32-bit signed integers can hold values up to 2 147 483 647 — which corresponds to 03:14:07 UTC on Tuesday, 19 January 2038. After that, 32-bit Unix time overflows. Old C code that still uses time_t as a 32-bit type will wrap to negative numbers (circa 1901), with predictable disasters.

Modern systems use 64-bit time_t (signed), which pushes the rollover out to year 292 277 026 596 — well past the expected heat death of the universe. JavaScript stores epoch in a 64-bit float (millisecond precision), which is safe through year ≈275 760. So unless you're maintaining a 32-bit C codebase from 1990, you're unlikely to be bitten.

Frequently asked questions

What's an epoch / Unix timestamp?

It's the number of seconds (or milliseconds) since 1970-01-01 00:00:00 UTC. Computers love it because it's just an integer — no timezones, no calendar weirdness, no Y2K-style edge cases until the year 2038 (for 32-bit signed ints) or year 292,277,026,596 (for 64-bit ints).

Seconds or milliseconds — how do you tell?

By magnitude. Any number ≥ 10¹² is treated as milliseconds (1 000 000 000 000 ms = year 2001), anything smaller is treated as seconds. You can also force one or the other with the unit picker.

What date formats does the parser accept?

Anything JavaScript's Date.parse() understands: ISO 8601 (2024-03-15T10:30:00Z), RFC 2822 (Fri, 15 Mar 2024 10:30:00 GMT), short forms (2024-03-15), and time-only or month-only strings (engine-dependent). Strings without a timezone are interpreted in your local timezone.

Why do I see a different time than my colleague?

Because timezones. The epoch number is the same everywhere — 1 700 000 000 always points to the same instant — but how it's displayed depends on the timezone you've picked. Use the timezone field to pick whichever you want to read in.

What about leap seconds?

Unix time intentionally ignores them — when a leap second is inserted, the epoch counter pauses for one second or repeats one second. The displayed UTC time stays correct, but the gap between two timestamps may be one second off across a leap-second boundary. This rarely matters for application code.

Is anything sent to a server?

No. All parsing and conversion run in your browser using built-in Date and Intl APIs. Even the current-time ticker is just setInterval(Date.now). Open DevTools → Network to verify.

Why is the timezone list short?

We surface the most common IANA timezones in the dropdown to keep it scannable, but the input field accepts any IANA name (e.g. America/Argentina/Salta). Type it in — anything Intl.DateTimeFormat supports will work.

Keep exploring

More tools you'll like

Hand-picked utilities that pair well with the one you're on — all free, client-side, and zero-signup.