Snowflake ID → timestamp converter
Decode the creation time of any Snowflake ID — Discord, Twitter/X, Instagram, Mastodon or your own custom epoch — or generate min/max snowflakes from a date for ID range queries. All in your browser.
epoch timestamp shortcuts
snowflake → timestamp
date / timestamp → snowflake
min and max are the smallest and largest snowflake for
that instant in the selected variant — use them as inclusive bounds
for ID range queries, or a Discord before/after
search cursor.
How a Snowflake ID encodes time
A Snowflake ID is a 64-bit integer whose most significant bits are a
millisecond timestamp measured from a service-specific epoch. In the
original Twitter layout — kept by Discord — the top 41 bits are
milliseconds since the epoch, followed by 10 bits of worker/process
ID and a 12-bit per-millisecond sequence, so the timestamp is simply
id >> 22 plus the epoch. The epochs differ:
Twitter/X counts from 4 November 2010, Discord from
1 January 2015. Instagram shifts by 23 bits over its own
2011 epoch, and Mastodon simply uses Unix milliseconds shifted 16 bits.
Pick the service above — the same digits decode to very different dates
under the wrong epoch. Because the timestamp sits in the high bits,
snowflakes sort by creation time, which is why a tweet or Discord message
ID doubles as a creation date.
Querying and filtering by snowflake range
The min snowflake for an instant is the timestamp with worker
and sequence bits all zero; the max has them all one. Any real ID
created at that instant lies between the two, so the pair works as
inclusive BETWEEN bounds in a database keyed by snowflakes,
and the min value alone is the standard way to build a Discord search
cursor: pass it as before/after to page through
messages by date. To timestamp a snowflake in code, shift right by the
variant's bit count and add its epoch — the decoder above shows the
formula it used for the selected service.