What the markup is
A Discord timestamp is a small piece of message markup with two parts:
<t:TIMESTAMP:STYLE>. TIMESTAMP is a Unix timestamp in
seconds — a bare integer, no decimal point, no separators. STYLE is a
single letter choosing how it is displayed. Type that text into a message and each reader's client
replaces it with a formatted local time.
The point is not brevity, it is correctness. Writing "raid at 20:00 UTC" makes every reader do arithmetic, and some of them will get it wrong, especially across a daylight-saving change where the offset they remember is no longer the offset in force. A timestamp tag moves that conversion from seven humans to one client, and it stays correct if the event is rescheduled across a clock change.
The nine styles, side by side
Every tag below encodes the same instant — 1700000000, which is
2023-11-14T22:13:20.000Z. Only the display differs.
| Style | Name | Tag | Renders as | Reach for it when |
|---|---|---|---|---|
t | Short Time HH:MM | <t:1700000000:t> | 22:13 | A raid, stream or standup start time, when everyone already knows the day. |
T | Medium Time HH:MM:SS | <t:1700000000:T> | 22:13:20 | Anything where the exact second matters — a countdown target or a drop time. |
d | Short Date DD/MM/YYYY | <t:1700000000:d> | 14/11/2023 | A deadline or release date with no time attached. |
D | Long Date D Month YYYY | <t:1700000000:D> | 14 November 2023 | The same date written out, for announcements rather than logistics. |
f | Long Date, Short Time D Month YYYY HH:MM | <t:1700000000:f> | 14 November 2023 22:13 | The default and the safest general choice: date plus time in one line. |
F | Full Date, Short Time Weekday, D Month YYYY HH:MM | <t:1700000000:F> | Tuesday, 14 November 2023 22:13 | Event announcements, where naming the weekday stops people misreading the date. |
s | Short Date, Short Time DD/MM/YYYY, HH:MM | <t:1700000000:s> | 14/11/2023, 22:13 | A compact date-and-time for logs and tables, where the numeric date saves horizontal space. |
S | Short Date, Medium Time DD/MM/YYYY, HH:MM:SS | <t:1700000000:S> | 14/11/2023, 22:13:20 | The same compact form when the second matters — audit trails and precise cut-offs. |
R | Relative Time N units ago / in N units | <t:1700000000:R> | 3 hours ago | Countdowns and "how long ago" — the only style that keeps changing after you post it. |
Two properties of that list are worth stating plainly. The letters are
case-sensitive, and the case carries meaning in three separate pairs —
d/D, f/F and s/S are six distinct styles, not three. And omitting the suffix entirely, writing
<t:1700000000>, falls back to f.
Which style to actually use
For a scheduled event, F is usually right: naming the weekday removes the most common misreading, where someone sees a date and assumes the wrong day of the week. For a countdown, R is the only style that keeps working — it re-renders every time the message is viewed, so a pinned post stays useful without anyone editing it.
The combination worth knowing is posting two tags for one instant:
<t:1700000000:F> (<t:1700000000:R>).
The first gives the absolute time for anyone planning around it; the second gives the distance for
anyone skimming. Readers get both without a single conversion between them.
Getting the timestamp itself
The tool at the top of this page is the shortest route: switch to date → epoch, pick the moment in your own zone, and the generated tags follow. Three other routes for when you are already somewhere else:
- You have a date in mind. Use the date to Unix timestamp page, set the zone deliberately, and take the seconds value. Getting the zone right here is the whole job — an hour's error produces a tag that is confidently, precisely wrong for everyone.
- You have a 13-digit number. That is milliseconds. Divide by 1000 and drop the
remainder, or paste it into the tool above and let it floor for you. A 13-digit value pasted
straight into a tag renders a date tens of thousands of years out —
1700000000000becomes+055840-11-08T22:13:20Z. - You want "right now".
date +%sin a shell, or the live readout on the current Unix timestamp page.
When a tag does not render
A tag that shows as literal text has one of a small number of causes, and they are quick to check in
order. The angle brackets are missing, or an autocorrect turned them into typographic characters.
The timestamp is not a bare integer — a decimal point, a comma or a stray space breaks it. The style
letter is not one of the nine documented above, which is usually a case slip such as r for R. Or the tag sits inside a code block or an inline code span: Discord's
reference does not document how <t:> behaves inside code formatting, but in
practice the markup is shown literally there rather than rendered, the same way bold and links are —
that one is an observation from using it rather than a documented guarantee. Paste it as ordinary
message text and it renders.
One more thing worth setting expectations on: how a specific client draws the rendered text — the separator it uses, whether it writes the month in full, how it words a relative label — follows the reader's locale, so it is not something this page can predict. What the style letter reliably controls is which fields appear: time only, date only, both, and whether the weekday is included. That part is what the table above documents.
Related pages
- Date to Unix timestamp — pick the moment in the right zone before you build the tag.
- Unix timestamp to date — check what a tag someone else posted actually points at.
- Current Unix timestamp — the live count, for "starting now" posts.
- Milliseconds to date — why the 13-digit value in your clipboard needs dividing first.