ToolJutsu
All tools
Developer Tools

ISO Time Converter

Convert between ISO-8601, Unix timestamps and human-readable dates.

Now —2026-05-23T13:38:30.237Z·1779543510
Processed on your device. We never see your files.

How to use ISO Time Converter

What is ISO-8601?

ISO-8601 is the international standard for representing dates and times as strings. The canonical form is 2026-05-20T18:00:00Z — four-digit year, two-digit month and day, T separator, two-digit hour/minute/second, and a zone designator (Z for UTC, or ±HH:MM for an offset). Fractional seconds are optional (2026-05-20T18:00:00.123Z). The standard sorts lexicographically — comparing two ISO strings as text gives the same result as comparing them as dates — which is why it shows up in filenames, log lines and database columns everywhere.

What is a Unix timestamp?

A Unix timestamp is the number of seconds elapsed since 1970-01-01T00:00:00Z, ignoring leap seconds. It is an absolute, timezone-independent number — 1700000000 refers to exactly the same instant whether you’re in Tokyo, Lagos or Berlin. JavaScript, like many newer environments, prefers milliseconds (the value Date.now() returns), so you’ll see Unix timestamps in two main flavours: 10-digit seconds for shell tools, databases, and most languages, and 13-digit milliseconds for JavaScript, browser APIs, and increasingly modern logging pipelines.

The conversion is purely arithmetic — Math.floor(ms / 1000) to go from milliseconds to seconds, seconds * 1000 to go back — but the two values look enough alike (and are wrong by exactly the same factor) that confusing them is a perennial source of bugs.

How the converter works

The tool keeps three representations of a single instant in sync at all times:

  1. ISO-8601 string in UTC (2026-05-20T18:00:00.000Z) and in the browser’s local zone.
  2. Unix timestamp in seconds (10 digits) and milliseconds (13 digits).
  3. Human-readable rendering — Wednesday, 20 May 2026, 18:00:00 UTC — using Intl.DateTimeFormat so it matches your locale’s date conventions.

Edit any one of those and the others recompute. A live now panel ticks at the top of the page so you can grab the current instant in every format with a single click. Pasted input is auto-classified (ISO string, 10-digit seconds, 13-digit milliseconds, RFC 2822) and parsed accordingly, with a clear error if the input is ambiguous.

Common use cases

  • Debugging API responses. A JSON field says 1700000000 — is that seconds or milliseconds? Paste and read the human date.
  • Log analysis. Server logs in epoch seconds, browser logs in milliseconds, alerting dashboards in ISO; the converter is the glue between them.
  • Scheduling and cron. Converting a target wall-clock time into the Unix timestamp your scheduler needs (or vice versa).
  • SQL queries against time columns. Postgres to_timestamp(…), MySQL FROM_UNIXTIME(…), BigQuery TIMESTAMP_SECONDS(…) — quickly validate the integer you’re about to paste into a query.
  • Timezone audits. Confirming that a server-side timestamp in +00:00 really is the same wall-clock time a client in +05:30 reported.

How to use this ISO time converter

  1. The top of the page shows the current instant in every format, refreshing each second. Click any value to copy.
  2. To convert an arbitrary timestamp, paste it into the input field. The converter auto-detects:
    • 10-digit integer → Unix seconds.
    • 13-digit integer → Unix milliseconds.
    • String containing T or Z → ISO-8601.
    • Other recognisable formats (RFC 2822, date-only) → parsed via the browser’s Date constructor.
  3. The output panel shows the instant as ISO-8601 in UTC, ISO-8601 in your local zone, Unix seconds, Unix milliseconds, and a human-readable date in your locale.
  4. To go the other direction, type into the ISO-8601 or human-readable field directly — the integers update.
  5. The local-time line displays the IANA zone name (for example Europe/Berlin) and the current offset (+01:00 or +02:00 depending on DST), so there is no ambiguity about which zone “local” means.

Security considerations

This is a parser, not a credential tool, so the security surface is small. Two things to keep in mind:

  • Naïve Date.parse. A string like 2026-05-20T18:00:00 (no zone) is interpreted as local time by JavaScript, which means the same string produces different absolute instants on machines in different timezones. The converter flags missing zone designators explicitly so you don’t get a silently wrong answer.
  • Leap seconds. Unix time pretends leap seconds don’t exist — a Unix second is a 1/86400th of a UTC day, except on leap-second days when one second is “smeared” or “stepped” depending on the OS. For ordinary application use this is invisible; for sub-second precision over historical dates, no JavaScript-based converter is authoritative.

Privacy

Every conversion is performed by the browser’s built-in Date and Intl APIs running on your CPU. No timestamps are sent to a server, no analytics are collected on the values you enter, and the page works offline once loaded — the live clock ticks from your local machine, not from a remote time source. You can verify in the Network tab: zero requests after the initial load.

Compatibility notes

The tool requires Date, Intl.DateTimeFormat, and Intl.DateTimeFormat().resolvedOptions() — all present in every browser released since 2017 (Chrome 24+, Firefox 29+, Safari 10+, Edge 12+). ISO-8601 output uses the format produced by Date.prototype.toISOString(), which is identical across browsers and accepted as input by every backend language’s date parser (Python datetime.fromisoformat, Go time.Parse(time.RFC3339, …), Postgres timestamptz, and so on).

Frequently asked questions

Is my timestamp in seconds or milliseconds?
Count the digits. A Unix timestamp in seconds for any date between 2001 and 2286 is 10 digits long (1700000000 is November 2023). The same instant in milliseconds is 13 digits long (1700000000000). A 16-digit number is microseconds; 19 digits is nanoseconds. This tool auto-detects by digit count: anything under ~10^11 is treated as seconds, anything above as milliseconds. If you're unsure, paste the value and look at the resulting date — if a 13-digit value gave you a year in 56,000 AD, you fed seconds where milliseconds were expected (or vice versa).
How does the tool handle timezones?
ISO-8601 strings that end in Z (or +00:00) are UTC. Strings that end in an offset like +05:30 are in that offset. Strings with no zone (2026-05-20T18:00:00) are interpreted as local time — this is the JavaScript Date.parse behaviour and the cause of countless bugs; the converter flags this case explicitly. The output panel shows the instant in both UTC and your browser's local timezone (computed from Intl.DateTimeFormat().resolvedOptions().timeZone) so you can see at a glance whether the value you expected matches.
What input formats does the converter accept?
Anything Date.parse accepts, which includes: full ISO-8601 (2026-05-20T18:00:00Z, 2026-05-20T18:00:00.123+05:30), date-only (2026-05-20, interpreted as UTC midnight), RFC 2822 dates (Wed, 20 May 2026 18:00:00 GMT — emails and HTTP), Unix seconds (10-digit integer) and Unix milliseconds (13-digit integer). Locale-specific formats (5/20/2026, 20.05.2026) are not part of the standard and are deliberately not parsed — they are ambiguous between month/day and day/month and will produce a clear error.
Does the tool handle daylight-saving time correctly?
Yes, because Unix timestamps and ISO-8601 with explicit offsets are both DST-agnostic — they describe absolute instants, not wall clocks. When the tool displays a value in your local zone it uses the browser's Intl and Date objects, which apply the correct DST rules for the date in question (so the same UTC instant might display as EST in January and EDT in July). DST issues only ever appear when you supply a wall-clock string without an offset, which is exactly when the converter warns you about ambiguity.
Where do my timestamps go?
Nowhere. The conversion runs entirely in your browser tab. Every parse, format and "now" calculation uses the browser's built-in Date, Intl, and performance.now() APIs on your CPU. No timestamps are uploaded, no analytics are collected on the values you enter, and the page works fully offline once loaded. The live now clock at the top of the page is your machine's clock — no NTP request, no time-server roundtrip.

Related tools