Discord Timestamp Generator
Turn a date, epoch or pasted <t:…> code into all seven Discord timestamp styles — previewed in your zone, entirely on this device.
Do it offline:$ date +%s
How to use it
- Pick a date, time and zone — or switch to Paste for an epoch value, a date string or a <t:…> code to restyle.
- Read the seven rows: one snippet per style letter, previewed in your zone.
- Copy one row, copy all seven, or download them as a text file.
- Paste the snippet into any Discord message and send.
A <t:…> code in a Discord message is not fixed text: each reader's client renders it in that reader's own locale and time zone. Pick a date here, or paste an epoch value or an existing code, and all seven style letters come back as copy-ready snippets, previewed in your zone. Everything runs on this device.
Examples
1784937600<t:1784937600:R>Ten digits parse as epoch seconds; R is the relative style, rendered as a distance in words rather than a calendar date.
1784937600000<t:1784937600:f>Thirteen digits detect as milliseconds, the badge names the unit, and the snippet keeps the same instant three digits shorter — <t:…> counts seconds.
2026-07-25T09:00:00<t:1784937600:F>Nine in the morning in Tokyo is midnight UTC: the picker lands on the exact count example 1 pasted, and each reader's client supplies the wall clock.
<t:1784970000:d>1784970000Pasting a code decodes it: the readout shows 1784970000, the badge names the d style, and all seven restyled rows are ready to copy.
1784937600.5<t:1784937600:t>A fractional epoch floors to the second containing the instant; a chip names the dropped fraction.
Every example on this page is executed against the same engine that powers the tool, on every build.
Gotchas worth knowing
Sub-second values floor toward minus infinity
Flooring is not truncation: -0.5 becomes -1, because the half second before the epoch belongs to second -1. The chip appears for negatives and positives alike, and every preview renders the floored second.
Dates before 1970 preview like any other
A negative seconds count names an instant before 1970-01-01T00:00:00Z, and it previews through the same Intl formatting as any other row. The cited Discord table says nothing about such values, so no promise is made here — check the copied snippet in a real channel.
Style letters are case-sensitive
d is Short Date and D is Long Date — two rows, one keystroke apart. A letter outside the seven refuses with an error anchored at the letter itself, naming the whole set.
Eleven and twelve digits could be two instants
A paste like 17849376000 fits the seconds band and the milliseconds band at once, readings centuries apart. The badge names both candidates with the likelier applied, and a unit chip pins your choice; the deep dive on unit magnitudes belongs to the Unix timestamp converter page.
Spring-forward wall times still resolve
2026-03-08T02:30 never appears on America/New_York clocks — that hour is skipped — yet the picker resolves it deterministically, to 1772951400, by the two-pass rule the time family shares. Zone honesty in full lives on the timezone converter page.
Common errors
Not a timestamp or a recognizable date — try 1784937600 or 2026-07-25T00:00:00Z- No rung of the paste ladder matched: not a <t:…> code, not an epoch count, not a date form the parser knows. Nothing is cleared — fix the text in place, or start from the two shapes the message suggests.
"x" is not a Discord style — the seven letters are t, T, d, D, f, F and R (case-sensitive).- Style letters form a closed, case-sensitive set, so the error names all seven and anchors at the offending character. Lowercase r is the classic miss — Relative is capital R.
Outside the representable range — ECMAScript dates cover ±8,640,000,000,000,000 ms around 1970-01-01T00:00:00Z (about 271821 BCE to 275760 CE)- The seconds inside a snippet must stay within ECMAScript's window, and a digit string like <t:9999999999999> overshoots it — usually a milliseconds count pasted where the format expects seconds.
Input is larger than the 4 KB limit for this tool. Paste one date, epoch or <t:…> snippet — for the current epoch use the CLI: date +%s- One timestamp never needs four kilobytes, so anything past the cap refuses whole rather than converting a truncated prefix. The banner's command prints the current epoch seconds in any shell.
FAQ
Why does the preview show a different time than my friend sees?
Because that is the point: the code stores only a count of seconds, and each Discord client renders it using the viewer's own locale and time zone. Your preview uses your zone; another reader sees the same instant on theirs. Two people seeing different wall times means the timestamp is working.
Which style does <t:1784937600> use without a letter?
Discord's reference table marks f, the short date-and-time rendering, as the default — a bare code and its :f form read the same. The bare form also appears in this page's readout.
How do I put a timestamp in a Discord message?
Type or paste the snippet, angle brackets included, anywhere in the message text and send it — no bot, embed or permission involved, just like the rest of the chat formatting the Markdown Text 101 article covers.
Can I use dates before 1970 or far in the future?
The generator accepts the whole ECMAScript range, roughly 271821 BCE to 275760 CE, and a negative count is an ordinary value inside it. The cited table promises only the seven renderings and never states a range, so for extreme values trust what a real channel shows.
Keyboard shortcuts
- ⌘/Ctrl + Enter
- Run the conversion again immediately.
- ⌘/Ctrl + S
- Download all seven snippets as a .txt file.
- ⌘/Ctrl + C
- With nothing selected, copy the f row — the default; a selection copies itself.
- ⌘/Ctrl + Shift + C
- Copy the f row regardless of any selection.
- t
- Step to the next color theme (ignored while typing).
- ? or ⌘/Ctrl + /
- Open keyboard help.
- Esc
- Close the open overlay; the input is never cleared.