Unix Timestamp Converter
Epoch seconds to a readable date and back, in UTC and in your own time zone.
Updated
Seconds or milliseconds since 1970-01-01T00:00:00Z. A minus sign is allowed and means an instant before that.
That instant is
2026-01-01T00:00:00.000Z
Thursday, in ISO 8601 extended format
- UTC
- Thu, 01 Jan 2026, 00:00:00 GMT+0
- Your time zone
- Reading your browser clock
- Day of week (UTC)
- Thursday
- ISO 8601
- 2026-01-01T00:00:00.000Z
- Epoch seconds
- 1767225600
Read as seconds, because the number is small enough that nothing else is plausible. Force the other reading with the selector if that guess is wrong for your data.
In short
What does a Unix timestamp actually count?
Seconds elapsed since 1970-01-01T00:00:00Z, with no time zone attached to the number itself. Timestamp 0 is that instant, a Thursday. 1000000000 is 2001-09-09T01:46:40Z and 1767225600 is 2026-01-01T00:00:00Z. A 13-digit number is almost always milliseconds — a factor of 1000, and 55 thousand years of error if misread.
Unix time deliberately ignores leap seconds, so it is a count of calendar seconds rather than a true tally of elapsed SI seconds since 1970.
How to use the unix timestamp converter
Paste a timestamp and the panel gives you the same instant four ways at once: the ISO 8601 string, the UTC calendar reading, the same moment in your own browser time zone, and the day of the week. The conversion runs in the page, so nothing you paste is uploaded anywhere.
The first thing the tool tells you is which unit it assumed. That matters more than it sounds. A count of seconds and a count of milliseconds look identical apart from length, and getting it backwards moves the answer by a factor of 1000, which at 2026 scale is the difference between next January and the year 57971.
The second thing worth reading is the pair of zone rows. A Unix timestamp has no zone in it, which is exactly why it is a good storage format and a bad display format. The number is the same everywhere on earth, and the calendar reading of it is not.
0
The epoch
1970-01-01T00:00:00Z, a Thursday
2147483647
The 32-bit ceiling
2038-01-19T03:14:07Z
4294967295
Unsigned 32-bit
2106-02-07T06:28:15Z
Going the other way, the direction switch turns a calendar date into epoch seconds, and it asks you whether the clock you typed is UTC or your own local time. That question is not pedantry. It is the single most common source of an off-by-one-day bug in a date range query.
Negative timestamps work too. They count backwards from 1970, so -1 is 1969-12-31T23:59:59Z. They are perfectly legal, but a fair number of libraries and database drivers reject or mangle them, so check your storage layer before you rely on one for a historical date.
Do
- Store instants as UTC epoch seconds and convert to a zone only when displaying them.
- Quote the ISO 8601 string in bug reports so the reader never guesses your offset.
- Say seconds or milliseconds explicitly in any API field name or column comment.
- Test date handling with an instant past 2038-01-19 before you ship it.
- Treat a 13-digit number as milliseconds until something proves otherwise.
Don't
- Assume a timestamp column is seconds because the last one you saw was.
- Use Unix time to measure a duration that has to survive a leap second.
- Build a date range bound from a local wall clock without recording the offset.
- Store a formatted local date string where the instant itself is what matters.
- Round a millisecond timestamp by chopping three digits off the end of the string.
Timestamps worth recognising on sight, each one converted by the same engine this page runs on.
| Timestamp (seconds) | UTC instant | Day | Why it matters |
|---|---|---|---|
| -1 | 1969-12-31T23:59:59Z | Wednesday | One second before the epoch, and legal |
| 0 | 1970-01-01T00:00:00Z | Thursday | The epoch itself, defined by POSIX |
| 1000000000 | 2001-09-09T01:46:40Z | Sunday | The first billion, widely celebrated |
| 1767225600 | 2026-01-01T00:00:00Z | Thursday | A recent round calendar boundary |
| 2147483647 | 2038-01-19T03:14:07Z | Tuesday | The signed 32-bit ceiling |
| 2147483648 | 2038-01-19T03:14:08Z | Tuesday | Where a 32-bit counter wraps negative |
| 4294967295 | 2106-02-07T06:28:15Z | Sunday | The unsigned 32-bit ceiling |
What actually breaks on 19 January 2038?
A signed 32-bit integer holds values up to 2 to the power of 31 minus 1, which is 2147483647. Read as seconds since the epoch, that lands on 2038-01-19T03:14:07Z, a Tuesday. One second later the counter has nowhere to go and wraps to the most negative value it can hold, which reads as December 1901.
This is not a hypothetical for later. Any system that computes a date in the future crosses the line long before the date itself arrives. A thirty year mortgage schedule, a certificate expiry, or a retention policy measured in decades all hit it today, which is why the failures started surfacing years ago rather than waiting for 2038.
- Signed 32-bit, the classic time_t
- 2038-01-19T03:14:07Z
- Unsigned 32-bit, seconds
- 2106-02-07T06:28:15Z
- Signed 32-bit, milliseconds
- about 25 days after the epoch
- 64-bit signed, seconds
- about 292 billion years
Moving to a 64-bit time_t retires the problem entirely, which is why every current mainstream platform has already done it.
The fix is simply a wider integer, and most of the work is done. Linux, the BSDs, macOS and modern Windows all use a 64-bit time value on 64-bit builds. What is left is the long tail: embedded firmware, older 32-bit builds, file formats with a fixed 32-bit field, and database columns typed as a four-byte integer years ago.
The practical test is cheap. Set a date past 2038-01-19 in a staging environment and see what your stack does with it. If a value comes back in 1901, or a query silently returns nothing, you have found a 32-bit field, and you have found it while there is still time to widen it.
Counting the days between two dates
Once you have converted a timestamp to a calendar date, the next question is usually how far it sits from another one. The date difference calculator answers that in days, weeks and months.
Open the date difference calculator →Why Unix time is not a true count of elapsed seconds
Unix time is defined so that every day contains exactly 86400 seconds. That is a modelling choice, not a measurement, and it is written into the standard: POSIX defines seconds since the epoch by a formula built from the calendar date, with no term for leap seconds anywhere in it.
“Coordinated Universal Time is kept within 0.9 seconds of the earth rotation angle by the insertion of leap seconds, announced in advance by the IERS.”
Earth rotation is not that tidy, so UTC inserts a leap second when the gap grows too large. Twenty seven of them have been added since 1972, and the offset between International Atomic Time and UTC has stood at 37 seconds since the start of 2017. Atomic time counts every one of those seconds. Unix time counts none of them.
The consequence is concrete. A Unix timestamp during a leap second is ambiguous, because the same number has to serve two different real instants, and most systems handle it by repeating or smearing a second rather than by numbering it. Subtracting two timestamps across a leap second therefore gives you a duration that is off by one second per leap second in between.
It is also worth knowing the direction of travel. In 2022 the General Conference on Weights and Measures resolved to stop inserting leap seconds by 2035, which would let UTC drift further from earth rotation and remove the ambiguity that Unix time has been quietly papering over for fifty years.
The formula, worked line by line
There is no arithmetic worth the name here, which is precisely the appeal of the format. A Unix timestamp is a single integer, and every calendar reading of it is a rendering step rather than a calculation. That is why it sorts correctly as a number, compares with a single operator, and survives being written to any storage that holds integers.
The only two decisions the tool makes are which unit your number is in, and which time zone to render the answer in. Both are stated on screen rather than assumed silently, because both are places where a converter can be confidently wrong.
milliseconds = seconds x 1000
instant = 1970-01-01T00:00:00Z + timestamp seconds
auto-detect: abs(value) >= 100000000000 reads as milliseconds, otherwise seconds
signed 32-bit ceiling = 2^31 - 1 = 2147483647 seconds
unsigned 32-bit ceiling = 2^32 - 1 = 4294967295 seconds- The input
- 1767225600000
- Read as milliseconds
- 2026-01-01T00:00:00Z
- Read as seconds
- +057971-02-25T00:00:00Z
- The threshold
- 100000000000
- What the tool assumes
- milliseconds
The seconds reading is so far out that ISO 8601 needs its expanded year form to write it at all, which is the clearest possible sign the guess went the wrong way.
The zone question is the other half. ECMA-262 says a date and time string with no offset is read as local time, while a date on its own is read as UTC. That single rule is why new Date("2026-03-01") and new Date("2026-03-01T00:00") can be different instants in the same program.
This tool refuses to leave that implicit. When you convert a calendar date into a timestamp, you pick whether the clock you typed means UTC or your own wall time, and the answer moves by your offset accordingly. For anyone in London in July that is one hour, and for anyone in Auckland it is thirteen.
One last practical note on precision. Milliseconds are enough for logs and user-facing timing, but they are not enough for high-rate tracing, which is why microsecond and nanosecond epoch counts also exist. A 19-digit number is nanoseconds, and dividing it by a billion rather than a thousand is the fix.
Questions people ask
Sources
Where the constants and formulas on this page come from. Each line names the figure it backs.
Seconds since the Epoch are defined by a formula in which every day counts exactly 86,400 seconds, which is why leap seconds never enter the number.
The Open Group Base Specifications Issue 8, section 4.19 — Seconds Since the Epoch — The Open Group / IEEE, IEEE Std 1003.1-2024
The trailing Z in the timestamp this tool copies denotes a UTC offset of exactly 00:00.
RFC 3339: Date and Time on the Internet: Timestamps — IETF, 2002
The decision to stop inserting leap seconds, by raising the permitted UT1 minus UTC difference in or before 2035.
Resolution 4 of the 27th CGPM — On the use and future development of UTC — BIPM, 2022
Related guides
Putting JSON in a URL: Validate, Minify, Percent-Encode, or Base64url?
A decision guide for flattening, encoding, checking, and safely transporting JSON in a query string.
August 11, 2026 · 9 min read
How Many Grams in a Cup? Every Ingredient, One Chart
One formula, fourteen densities. Why flour is 120 g, honey is 340 g, and the ingredient — not the cup — decides the number.
August 10, 2026 · 14 min read
How Are Loan Payments Calculated? Amortization, Explained
One level payment, front-loaded interest — the formula worked by hand, the two levers you control, and why the smaller payment is often the costlier loan.
July 23, 2026 · 13 min read