Skip to content
Utilities

Snowflake ID & Date Converter

Discord IDs are snowflake IDs that encode their creation moment. Paste any ID to see the register date, worker/process and the binary layout. Or supply a date and get the snowflake range that moment belongs to.

  • Free, no limits
  • No login
  • Runs in your browser
Tool
Created (local time)1/29/2022, 10:23:34 AM
Created (UTC / ISO)2022-01-29T10:23:34.724Z
Timestamp (ms)1,643,451,814,724
Timestamp (seconds)1,643,451,814
Worker ID1
Process ID3
Increment0
Binary (64 bit)0000110100000000101001000111100011010001000000100011000000000000

About this tool

Every Discord ID is a snowflake, a 64-bit integer that encodes the exact millisecond the object was created. This tool unpacks the ID into its timestamp, worker, process and increment fields, then shows you the exact date and time in both local and UTC formats.

You can also go the other direction: pick any date and time, and the tool computes the smallest and largest snowflake IDs that could have been generated during that same millisecond.

How to use

1

Paste a Discord ID (snowflake) to decode its creation date.

2

Toggle the direction - convert a datetime into a snowflake range.

3

Inspect the binary, worker and sequence fields.

What a Discord snowflake actually contains

Every ID on Discord - users, messages, channels, servers, roles, attachments - is a snowflake: a 64-bit integer that encodes when it was created. Discord borrowed the format from Twitter, and the useful consequence is that an ID is also a timestamp. You do not need to ask an API when something was made, because the answer is already sitting inside the number.

The 64 bits are divided into four fields. The top 42 bits are milliseconds since the Discord epoch, which is 1 January 2015 at midnight UTC (1420070400000 in Unix milliseconds). The next 5 bits are the internal worker ID, the 5 after that are the process ID, and the bottom 12 are a per-process counter that increments for each ID generated in the same millisecond.

To read the timestamp you shift the number right by 22 bits to discard the worker, process and counter fields, then add the Discord epoch. In JavaScript that is `Number(BigInt(id) >> 22n) + 1420070400000`. The BigInt matters: a snowflake exceeds Number.MAX_SAFE_INTEGER, so doing this with ordinary numbers silently loses precision and gives you a timestamp that is close but wrong.

The 12-bit counter and why IDs are not strictly sequential

The bottom 12 bits allow 4,096 IDs per process per millisecond. Because the worker and process fields sit between the timestamp and the counter, two IDs generated in the same millisecond by different workers do not sort in generation order relative to each other - they sort by worker ID first.

In practice this rarely matters, because a millisecond is a long time and Discord's ordering guarantees are per-channel rather than global. But it does mean you should not treat a snowflake as a strict global sequence number. If you need to know which of two near-simultaneous messages came first, the channel's own ordering is authoritative, not the raw integer comparison.

Practical uses for reading an ID

Account age checks are the most common. Because the creation time is embedded in the user ID, you can tell how old an account is without any API call - which is why raid protection bots reject accounts created in the last few hours. They are reading the snowflake, not querying Discord.

It is also useful for auditing. If you are investigating when a channel was created or when a specific message was posted and you only have a copied ID, converting it gives you an exact UTC timestamp to work from. And because the epoch is fixed, an ID converted today gives the same answer as one converted in five years.

The formula behind snowflakes

The conversion is simple: shift the ID right 22 bits to drop the worker, process and increment fields, then add 1420070400000, which is Discord's epoch in Unix milliseconds. The resulting number is the exact timestamp in milliseconds.

If you have an ID like 936929561302675456, dividing by 2^22 and adding the epoch gives you a human-readable date like October 20, 2020 at 08:29:52 UTC.

Practical ways to use snowflake math

Bot developers use snowflake ranges to query all messages or users created in a specific time window. Moderators check the age of accounts involved in a raid. Archivists date channels and messages without calling the API for every single item.

Snowflakes vs other ID systems

Unlike random UUIDs or auto-incrementing database IDs, snowflakes are sortable by time without any external data. This is why Discord never reveals a separate created_at field for most objects; the ID itself carries that information. Twitter pioneered this format in 2010, and Discord adopted it in 2015 with a custom epoch.

What the worker and process bits mean

Discord uses the middle bits to route ID generation across its internal systems, so the worker and process values can help identify which part of Discord's infrastructure created a given object. For most users these are just trivia, but they confirm the internal distribution of ID generation.

Frequently asked questions

What is a Discord snowflake?

A snowflake is a 64-bit integer containing a 42-bit timestamp, 5-bit worker ID, 5-bit process ID and 12-bit sequence counter, inspired by Twitter's snowflake system.

Why does my user ID tell you when I registered?

Because the first 42 bits are the number of milliseconds since January 1, 2015, subtracting those bits from the full ID reveals the creation time.

Can I see any private information from an ID?

No. An ID only reveals when the account, message or channel was created. It does not contain personal data.

Try other relevant tools