Discord Snowflake Calculator
A snowflake encodes milliseconds since Discord's epoch of 1 January 2015, along with worker, process, and increment bits. This calculator converts snowflakes to exact timestamps and works in reverse, generating the snowflake for a given date so you can filter API queries by time.
Date to Snowflake Generator
Convert any target calendar date & time into a Discord snowflake ID (useful for bot API search boundaries like before / after parameters).
Batch Discord ID Decoder
| Discord ID | Created Date (UTC) | Account Age | Worker | Process | Increment |
|---|
How to use the Snowflake Calculator
- Paste one or more snowflake IDs to decode them in a batch.
- Or enter a date to generate the snowflake for that moment.
- Copy the result into your API query, bot code, or audit notes.
The Discord Snowflake Structure
Discord uses Twitter's Snowflake format for 64-bit unique identifiers. Starting from the custom epoch 1420070400000 (January 1, 2015 00:00:00 UTC):
- Bits 22 to 63 (42 bits): Milliseconds since Discord Epoch.
- Bits 17 to 21 (5 bits): Internal Worker ID (0-31).
- Bits 12 to 16 (5 bits): Internal Process ID (0-31).
- Bits 0 to 11 (12 bits): Increment counter for IDs generated within the same millisecond on that process.
How Discord snowflake IDs encode time
Every ID Discord issues is a 64-bit snowflake, and the upper 42 bits hold a millisecond timestamp counted from Discord's own epoch of 1 January 2015. The remaining bits identify the internal worker and process that generated the ID and an increment counter that prevents collisions within the same millisecond. That layout means an ID contains its own creation time and no API call is needed to read it.
Because the timestamp sits in the high bits, snowflakes sort chronologically as numbers. A larger ID was always created later than a smaller one, which is what makes ID-based pagination work in the Discord API. It also means you can filter by time without a date field: generating the snowflake for a given moment gives you a boundary value to compare against.
That reverse direction is the underused half. If you want every message in a channel after a specific date, you convert the date into a snowflake and pass it as the after parameter. The worker and increment bits can be zeroed for this, since only the timestamp portion matters for a comparison boundary.
Common problems and fixes
- The decoded date is in 1970
The value was treated as a Unix timestamp rather than a snowflake. Discord's epoch starts in 2015 and must be added back. - A pasted ID loses its last digits
Snowflakes exceed the safe integer range in JavaScript and some spreadsheets. Handle them as strings or BigInt. - The ID returns an invalid result
Confirm you copied a full 17 to 19 digit ID with Developer Mode enabled, not a truncated or partial value.
Frequently asked questions
What is a Discord Snowflake ID?
A Snowflake ID is a 64-bit unique number assigned to every user, guild, channel, message, and role in Discord.
What is the Discord Epoch timestamp?
Discord epoch begins at 1420070400000 ms (January 1, 2015 00:00:00 UTC). Snowflakes measure time elapsed since this moment.
How do you calculate the creation date from an ID?
Right-shift the snowflake by 22 bits and add 1420070400000 ms to obtain the Unix millisecond timestamp.
Can two Discord entities have the exact same snowflake ID?
No. The combination of worker ID, process ID, and internal increment ensures every snowflake is globally unique across Discord.
What is the Discord epoch?
1 January 2015 at midnight UTC, expressed as 1420070400000 in milliseconds. Snowflake timestamps are offsets from this point.
Can I tell exactly when an account was created from its ID?
Yes. The timestamp is the account creation time to the millisecond and cannot be altered afterwards.
Why generate a snowflake from a date?
To use it as a boundary in API queries, so you can request only messages or audit entries after a specific moment.