SimplyCalculated.org

Unix Timestamp Converter

Convert a Unix timestamp (seconds since January 1, 1970, UTC) into a readable date — or go the other way from any ISO 8601 date back to a timestamp. Both directions update live, entirely in your browser.

100% private: everything is processed in your browser's memory — nothing you enter is uploaded to a server, logged, or stored.

Unix Timestamp Converter

Seconds since January 1, 1970, 00:00:00 UTC. Negative values are pre-1970 dates.

Type on either side — the other side updates instantly.

What Is a Unix Timestamp?

A Unix timestamp is a single integer counting the seconds that have elapsed since January 1, 1970, 00:00:00 UTC — an instant called the Unix epoch. Right now that number is around 1.7 billion; it crossed one billion in September 2001. The format is deliberately plain: no time zone, no calendar, no formatting — just a count of seconds. Because the epoch is fixed in UTC, the number represents the same instant for every system on Earth, which is precisely why it became the universal way for computers to agree on time. Almost every programming language, database, and API you will ever touch stores or transmits moments in this form, and converting the occasional raw timestamp back into a human calendar date is a routine developer chore.

Why Seconds Since 1970?

The choice of 1970 is pure history. The Unix operating system's designers needed a zero point for their internal clock in the early 1970s, picked the start of the previous year as something convenient, and the convention became a standard. What matters today is not the date's meaning but its ubiquity: JSON APIs emit it, PostgreSQL's default timestamp columns store it, JWT tokens embed it, file systems record it, and every logging framework timestamps events with it. Understanding the format means you can read the time right out of raw data instead of reaching for a tool.

The One Gotcha: Seconds vs Milliseconds

The most common mistake is confusing seconds with milliseconds. JavaScript's own Date.now() returns milliseconds, while most APIs and databases store seconds — so a value copied from browser code is often exactly 1000 times too large. The digit count tells you which you have: in the 2020s, seconds values are 10 digits and milliseconds values are 13. This tool expects seconds; if you paste a 13-digit value and the result lands in the 54,000s, you have milliseconds and should divide by 1000 first. A third variant exists too — some systems store minutes or days — but seconds and milliseconds cover the overwhelming majority of real data.

How the Tool Works

Type on either side and the other side updates instantly. The timestamp side accepts any whole number of seconds, including negatives for pre-1970 dates, and rejects fractions, letters, and out-of-range values with a clear message. The date side accepts ISO 8601 text: full strings like 2024-03-15T12:30:00.000Z, strings with a different offset such as 2024-03-15T12:30:00+02:00, or bare dates like 2024-03-15 (interpreted as UTC midnight). The converted date is always emitted in UTC with the Z suffix, so the value is unambiguous and identical everywhere on Earth.

Step-by-Step: Decoding a Raw Value

Suppose an API response contains "expires_at": 1710505800. Paste 1710505800 into the timestamp box. The tool multiplies by 1000 to get milliseconds, builds a date, and formats it in UTC: 2024-03-15T12:30:00.000Z — so the token expires at 12:30 UTC on March 15, 2024. Now do the reverse: type 2038-01-19T03:14:08.000Z and the tool answers 2147483648 — exactly one second past the 32-bit limit, a nice way to see the Y2038 boundary with your own eyes.

Reference Table

Timestamp Date (UTC) Note
0 1970-01-01T00:00:00.000Z The Unix epoch
1000000000 2001-09-09T01:46:40.000Z One billion seconds
1700000000 2023-11-14T22:13:20.000Z A typical recent timestamp
2147483647 2038-01-19T03:14:07.000Z The Y2038 limit (32-bit)
-86400 1969-12-31T00:00:00.000Z One day before the epoch
253402300799 9999-12-31T23:59:59.000Z The ISO 8601 ceiling

Paste any row into the tool to confirm — the round trip is exact in both directions.

Where Timestamps Turn Up

Once you start looking, raw seconds are everywhere — which is why every developer eventually needs a converter in their bookmarks. The common cases:

  • APIs and tokens: JWT exp and iat claims, OAuth expiry, and most REST payloads carry seconds.
  • Databases: default timestamp columns in PostgreSQL, MySQL, and SQLite store Unix seconds or milliseconds.
  • Logs and events: server logs, analytics events, and metrics all stamp instants as numbers.
  • File systems: file creation and modification times on most platforms are Unix-based.
  • Cookies and sessions: expiration values in many languages are computed as timestamp arithmetic.

Reading Timestamps in the Wild

With practice you can read raw data the way you read a clock. A 10-digit number in a JSON payload or log line is almost certainly seconds: 1,500,000,000 means late 2017, and 1,700,000,000 means late 2023, so the leading digits alone date-stamp the value to within a few years. A 13-digit number is milliseconds — same values, times 1000 — which you will see in JavaScript timestamps and some NoSQL stores. A bare date like "2024-03-15" is not a timestamp at all but an ISO date, and a value with a trailing Z or an offset is already formatted. Being able to classify a value at a glance — seconds, milliseconds, or ISO — is the difference between fixing a broken log in seconds and burning an hour on it.

The Silent Zero

The timestamp 0 — January 1, 1970 — is worth special attention because many systems use it as a stand-in for "never" or "unknown": a missing password-change time, an unset expiry, a record imported from a legacy database with no date. When you decode a zero timestamp in your data, ask whether it means the epoch or means the value was never written — the two are indistinguishable from the number alone. The same applies to 1970-01-01T00:00:00Z showing up suspiciously often in reports; it is usually a placeholder, not a real moment in 1970.

Gotchas Beyond Seconds vs Milliseconds

Timezone Blindness Is a Feature

A timestamp is an instant, not a local date. Converting 1700000000 to "2023-11-14" is only correct for UTC viewers; in Tokyo it is already November 15. Always convert to a display zone at the last step of your pipeline, never earlier.

Leap Seconds Are Smoothed Over

Official UTC has inserted 27 leap seconds since 1972, but Unix time ignores them — it counts exactly 86,400 seconds per day. The result is that a timestamp can drift from true atomic time by under a minute, which is irrelevant for virtually every real use and universally accepted.

32-Bit Legacy Data

If you see timestamps near 2147483647 in old exports, they came from a 32-bit system — and anything claiming to be after 2038 in that format is corrupt.

Frequently Asked Questions

Why is the Unix epoch January 1, 1970?
Because that is when the Unix operating system's clock was defined. In 1971, Ken Thompson and Dennis Ritchie picked the start of 1970 as the zero point for the system time — a date with no particular significance, chosen because it was simple and recent enough for the 32-bit integers of the era. The convention stuck: today's POSIX standard, most programming languages, and the vast majority of databases all measure time in seconds since that instant.
Seconds or milliseconds — how do I know which I have?
The digit count is the tell. A seconds-based timestamp is 10 digits today (1700000000 in late 2023), while a milliseconds-based one is 13 digits (1700000000000). If your value looks too large for the date you expect, it is almost certainly milliseconds — divide by 1000. If it looks too small, it may be in minutes or days instead. This tool expects seconds, which is what most APIs, databases, and languages use.
Do timestamps depend on my time zone?
No — that is their superpower. A timestamp is a single number that means the same instant everywhere on Earth, because it counts seconds since an instant fixed in UTC. Displaying that instant in a local calendar is a presentation concern; the number itself is timezone-agnostic. That is exactly why logs, APIs, and databases store instants this way: the number never needs conversion when it crosses a border.
What is the Y2038 problem?
32-bit signed integers max out at 2,147,483,647 — which is exactly 2038-01-19T03:14:07Z. One second later, a naive 32-bit system overflows. It is the sequel to the Y2K bug, and while virtually all modern systems use 64-bit integers (which last about 292 billion years), legacy embedded devices and old file formats still lurk. If you ever see a timestamp of exactly 2147483647 in old data, you are looking at the last second of the 32-bit era.
Can timestamps be negative?
Yes. Dates before the 1970 epoch are simply negative numbers: 1969-12-31T23:59:59Z is -1, and 1950-01-01T00:00:00Z is about -631,152,000. This tool accepts negative values and converts them like any other. If your system displays a huge negative number for a birth date or a document created in the 1960s, that is normal behavior, not corruption.
Why is the maximum date the year 9999?
Because JavaScript's Date object — which this page uses — is specified to handle a range of about ±8.64 million billion milliseconds, which reaches just past the year 275,760 on one end and year 0001 on the other. In practice the ISO 8601 string format this tool outputs is constrained further, so 9999-12-31T23:59:59Z (timestamp 253402300799) is the practical ceiling. If you need centuries beyond that, no mainstream system supports it anyway.
Is my input sent anywhere?
No. Conversion happens entirely in your browser with built-in date functions — nothing you type is uploaded, logged, or stored.

Formula last verified August 22, 2026 against our published methodology .