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.
Advertisement
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.
Advertisement
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.
Advertisement
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.
Advertisement
Questions people ask
How do I tell whether a timestamp is in seconds or milliseconds?
Count the digits. A current timestamp in seconds has 10 digits and one in milliseconds has 13, and that gap holds for any date from the 1970s until well into the next century. The tool uses a threshold of 100000000000 to decide, because 100 billion seconds is the year 5138 and 100 billion milliseconds is March 1973, so no plausible value from either family sits on the wrong side of it. If the resulting date looks absurd, that is the usual symptom, and overriding the unit with the selector is the fix. Microsecond counts have 16 digits and nanosecond counts have 19.
What is the Year 2038 problem, exactly?
A signed 32-bit integer stops at 2147483647, which as seconds since the epoch is 2038-01-19T03:14:07Z. One second past that, a 32-bit counter wraps to its most negative value and reads as December 1901 instead. Any system still storing time in a four-byte signed field is affected, and it bites early rather than on the day, because software that computes future dates crosses the line as soon as it looks far enough ahead. Current 64-bit platforms already use a wider time value, so the remaining exposure is mostly embedded firmware, old file formats and database columns typed as a four-byte integer.
Does Unix time account for leap seconds?
No, and that is by design rather than an oversight. POSIX defines seconds since the epoch with a formula that gives every day exactly 86400 seconds, so leap seconds simply do not appear in it. Twenty seven leap seconds have been inserted since 1972 and the offset between atomic time and UTC has been 37 seconds since the start of 2017, none of which Unix time counts. The practical effect is that subtracting two timestamps across a leap second gives a duration that is short by one second for each leap second in between, which matters for precision physics and almost nothing else.
Why does a Unix timestamp have no time zone?
Because the number is an instant rather than a reading of a clock. The same timestamp names the same moment everywhere on earth, and the time zone only enters when you render it into a calendar date for a human. That is what makes epoch seconds a good storage format: two instants compare with a single integer comparison, sorting is free, and there is no offset to lose in transit. It is also what makes it a poor display format, which is why this page shows UTC and your own browser zone side by side rather than picking one.
Can a Unix timestamp be negative?
Yes. Negative values count backwards from the epoch, so -1 is 1969-12-31T23:59:59Z and -86400 is exactly one day earlier than the epoch. The tool converts them the same as any other value. Support in the wild is patchier than the specification suggests, though: several languages, database drivers and spreadsheet importers reject negative epoch values or quietly turn them into something else, so verify the whole round trip before you store a historical date this way. For dates well before 1970, a plain calendar date column is usually the safer choice.
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
Utilities
How Long Should a Password Be?
Eight characters with every symbol you can find: 5 hours. Twelve lowercase letters and nothing else: 6 days.
August 15, 2026 · 10 min read
Utilities
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
Dates & Time
Time and a Half: The Regular Rate Is Not Your Hourly Wage
Every explanation says multiply your hourly rate by 1.5. That is the wrong number the moment a bonus, a shift differential, or a second pay rate enters the week.
August 30, 2026 · 8 min read