Developer 🔒 Runs in your browser — no data sent to servers

Milliseconds to Date Converter

Read a Unix timestamp in milliseconds as a date, with the sub-second part kept in the ISO 8601 line.

Current Unix Timestamp:
Timestamp → Date
Date → Timestamp

One timestamp or date per line, up to 500.

Convert Epoch Milliseconds to a Date

Most of the time values a front-end developer meets are in milliseconds, because that is what the language hands them: Date.now() counts milliseconds, not seconds. Everything downstream, from log pipelines to database columns, then has to agree on the unit. This page opens the Timestamp Converter with the Unit menu already on Milliseconds so a thirteen-digit number reads correctly the moment you paste it.

The answer appears on four lines at once: the instant in whichever zone is selected at the top right, the same instant in <abbr title="Coordinated Universal Time">UTC, the ISO 8601 form that most APIs want back, and the distance from now in plain words. All of it is computed in the page, so values out of a production log stay on your machine.

Thirteen digits, and when counting them is not enough

Auto-detect works from the digit count and is right for anything dated in this century, but the unit is a property of the system that produced the number, not of the number itself. Pin the Unit menu and the guess disappears. The cost of getting it wrong is not subtle, because each step between units moves the date by three orders of magnitude.

Unit chosen for 1735689600000Date it producesVerdict
Seconds25 October 56971Off by a factor of 1000 the wrong way
Milliseconds1 January 2025, 00:00:00 UTCWhat the number means
Microseconds21 January 1970, 02:08:09 UTCA near-1970 date is the classic symptom
Nanoseconds1 January 1970, 00:28:55 UTCAlmost the epoch itself

A date in the opening days of 1970 or one in the tens of thousands of years is therefore almost never bad data. It is the same integer read under the wrong unit, and the fix is the menu rather than the number.

Where millisecond timestamps come from

  • JavaScript: Date.now() and new Date().getTime() both return milliseconds, and new Date(n) expects them, which is why a ten-digit value has to be multiplied by 1000 first.
  • Java: System.currentTimeMillis() and Instant.toEpochMilli().
  • MongoDB: the BSON date type is a signed 64-bit count of milliseconds since the epoch.
  • Kafka, Elasticsearch and most JSON log formats, which inherited the unit from the languages that write into them.

Databases and Unix tooling lean the other way and count in seconds, so the boundary between a JavaScript service and a SQL column is exactly where the factor of 1000 gets lost. Converting a suspect value here and reading the date is the fastest way to see which side dropped it.

Rounding, and converting more than one

Going from milliseconds to seconds is a truncation, so do it in one place and in one direction. Mixing a floor in one service with a round in another produces off-by-one-second differences that only show up when two events land in the same second. The Batch tab under the converter follows the same rule: paste up to 500 lines, and each row gets a Seconds column with the fraction dropped alongside an ISO 8601 column that keeps it, ready to copy as CSV.

Related conversions

For a ten-digit value there is Timestamp to Date, and for the opposite direction Date to Timestamp, which returns both seconds and milliseconds for a date you pick. The current Unix timestamp is the live counter in the toolbar, and Discord timestamps needs the seconds form, which is a common reason to convert down.

Guides