Quick answer: the full syntax is <t:UNIX_SECONDS:STYLE>. Discord currently documents nine case-sensitive style letters: t, T, d, D, f, F, s, S, and R. The lowercase f style is the default when the style is omitted. Use whole Unix seconds—not JavaScript milliseconds—and remember that the visible result depends on the reader’s locale and timezone.
How Discord timestamp syntax works
Discord describes timestamps as a custom part of its message formatting. A basic tag contains t, a colon, and a Unix timestamp wrapped in angle brackets. Add another colon and a style letter to choose the presentation:
<t:1800000000>
<t:1800000000:F>
The number 1800000000 identifies one instant: 2027-01-15 at 08:00 in UTC. The tag itself does not carry a country, language, or timezone name. According to the current Discord API message-formatting reference, timestamps are expressed in seconds and displayed in the user’s timezone and locale. One reader may therefore see a 12-hour clock and month-first date while another sees a 24-hour clock and day-first date. Both renderings can identify the same instant.
Style letters are case-sensitive. t and T are different, as are d and D, f and F, and s and S. A generator should preserve the selected case exactly. If you want a ready-to-paste tag without doing the epoch calculation, use the LiveParse Discord Timestamp Generator.
All nine Discord timestamp formats
The table uses the names in Discord’s current developer documentation. Output descriptions are structural rather than fixed English examples because punctuation, date order, month names, and 12- or 24-hour clocks can vary by viewer.
| Style | Example syntax | Documented description | Useful when |
|---|---|---|---|
t | <t:1800000000:t> | Short Time | The date is already clear and seconds are unnecessary. |
T | <t:1800000000:T> | Medium Time | A clock time needs seconds. |
d | <t:1800000000:d> | Short Date | A compact numeric date is enough. |
D | <t:1800000000:D> | Long Date | A readable date is needed without a time. |
f | <t:1800000000:f> | Long Date, Short Time | A compact general-purpose date and time is wanted. This is the default. |
F | <t:1800000000:F> | Full Date, Short Time | The weekday helps make an event announcement clear. |
s | <t:1800000000:s> | Short Date, Short Time | Both date and time must fit in a compact layout. |
S | <t:1800000000:S> | Short Date, Medium Time | A compact date and a time with seconds are needed. |
R | <t:1800000000:R> | Relative Time | The message should describe the instant relative to when it is viewed. |
Why do some references say seven formats? Many older or incomplete lists stop after F and R. Discord’s current reference also lists s and S, making nine documented style letters. “Currently documented” is the useful claim; the reference does not provide a release date for the two compact styles.
Choose between time-only, date-only, and combined styles
Use t or T only when the surrounding sentence establishes the day. “Today at <t:…:t>” can be concise in a short-lived conversation, but it becomes unclear when someone finds the message later. The uppercase T adds seconds; that precision is useful for coordinated launches or incident timelines but usually adds noise to a casual event.
Use d or D when the clock time does not matter. The numeric d form is compact, yet its order follows locale, so one viewer’s month/day arrangement can differ from another’s. The written D form can be easier to scan when the exact date deserves more space.
The combined formats serve most scheduling messages. Lowercase f includes a long date and short time and is the documented default. Uppercase F adds the weekday, which is helpful for a raid, class, release, or community meeting. The compact s and S forms retain both date and time in less space; uppercase S includes seconds. These forms are especially useful in dense status lists or generated tables where a written month would dominate the row.
Use the R style for relative time
The R style asks the client to present the instant relative to the time of viewing. Depending on the instant and viewer, that can appear as wording equivalent to “in 2 hours” or “3 days ago.” It is useful for a countdown, submission window, maintenance start, or incident age. Avoid promising an exact refresh interval: Discord documents the style as Relative Time but does not specify a second-by-second update contract in the message-formatting table.
Relative text supplies urgency but can hide the calendar date. Pair it with an absolute style when people may revisit the message, cross a midnight boundary, or need to add the event to another system.
Event starts <t:1800000000:F> (<t:1800000000:R>).
Both tags must use the same Unix value. If one number is regenerated later, the displayed date and relative description can disagree. A one-click combined template in the Discord countdown generator avoids that copy error.
Copy-ready announcement patterns
Replace the sample number by generating the intended date and source timezone. The surrounding wording remains static while Discord formats each tag for the reader.
Community event: <t:1800000000:F> — <t:1800000000:R>.
Submissions close <t:1800000000:F> (<t:1800000000:R>).
Release window opens <t:1800000000:f>.
Maintenance begins <t:1800000000:F> and is expected to last 30 minutes.
Incident begins <t:1800000000:R> at <t:1800000000:T>.
Keep durations separate from instants. The timestamp identifies when maintenance begins; “30 minutes” describes an interval. Do not convert a duration such as 1,800 seconds into a date relative to 1970. For accessibility and resilience, give the timestamp a plain-language label such as “starts,” “closes,” or “began” instead of posting an unexplained tag by itself.
Convert many dates in bulk
For a release list, recurring meeting plan, content calendar, or migration spreadsheet, paste one value per line rather than generating each tag by hand. LiveParse’s bulk Discord timestamp generator accepts up to 500 non-empty lines of Unix seconds, complete tags, dates, or dates with times. It returns the selected style for every valid line and can also copy all nine style letters for every input.
1800000000
<t:1800000000:F>
2027-01-15
2027-01-15 21:00
2027-01-15T21:00:00+09:00
Keep the source timezone consistent before pasting date-only or clock-time lines: a date without a time resolves to midnight in that source zone, and a wall-clock time follows that zone’s daylight-saving rules. Leave an invalid line in place while correcting it—the tool reports the line number rather than silently omitting input.
Open the bulk Discord timestamp generator.
Understand source time, viewer timezone, and locale
Creating the Unix value and displaying it are two separate operations. First, the generator interprets the date and time in a source timezone and resolves it to one instant. Then Discord displays that instant using each viewer’s timezone and locale. The tag itself contains only Unix seconds and the style letter; it does not preserve the source timezone name.
This distinction matters for daylight saving time. A regional zone such as America/New_York has historical and seasonal rules, while a fixed offset such as UTC-05:00 does not adjust itself. During a spring transition, some local clock times do not occur. During a fall transition, one local time can occur twice. When scheduling near either boundary, use an IANA regional timezone, review the resolved UTC instant, and make an explicit choice if the local input is ambiguous.
A browser preview is only an approximation of what one reader may see. Discord’s documentation explicitly makes locale and timezone viewer-dependent, so a generator should not claim that punctuation or English wording will match every client. Validate the instant and style, then expect presentation differences that preserve the same moment.
Discord timestamps use seconds, not milliseconds
Discord’s reference says timestamp values are expressed in seconds. This differs from JavaScript’s Date.now(), which returns milliseconds. Around the present, Unix seconds are usually 10 digits while milliseconds are usually 13. Pasting a millisecond value directly into a Discord timestamp can produce an invalid or wildly distant date instead of the intended event.
Unix seconds: 1800000000 ← use inside <t:...:F>
Unix milliseconds: 1800000000000 ← divide by 1,000 first
Correct: <t:1800000000:F>
Wrong unit: <t:1800000000000:F>
If the millisecond value is divisible by 1,000, exact conversion is simple integer division. If it contains a sub-second remainder, choose and document whether to floor, round, or reject it; the inline tag cannot communicate that extra precision. Do not rely only on digit count for historical or far-future values. The seconds vs milliseconds guide explains reliable unit detection, and the Unix Timestamp Converter can inspect seconds, milliseconds, microseconds, and nanoseconds directly.
How to decode an existing timestamp tag
To decode <t:1800000000:F>, remove the angle brackets and split on colons. The first field, t, identifies timestamp markup. The second field, 1800000000, is the Unix-seconds value. The optional third field, F, selects the style. If no third field exists, use the default f interpretation described in Discord’s table.
- Preserve the original tag. Do not edit the number while trying to read it.
- Validate the shell. It should have angle brackets, a lowercase leading
t, and colon-separated fields. - Validate seconds. Treat the middle field as Unix seconds and check that it resolves to a plausible date.
- Validate the style. Accept only
t,T,d,D,f,F,s,S, orR. - Convert or restyle. Decode the number with the generator, then change only the final style letter to preserve the instant.
Developers parsing user input can start from a strict shape such as ^<t:(\d+)(?::([tTdDfFsSR]))?>$, then separately enforce the application’s allowed date range. A matching shape does not prove that a client will accept an extreme timestamp.
Convert a Discord snowflake ID to a timestamp
A snowflake is a Discord object ID—for example, the ID of a message, channel, or user—not an inline timestamp tag. Its top 42 bits store milliseconds since Discord’s epoch, 2015-01-01T00:00:00Z; the lower bits identify the worker, process, and increment. Shift the ID right by 22 bits and add Discord’s epoch, 1420070400000 milliseconds.
const snowflake = 1199835124667021433n;
const createdAtMs = (snowflake >> 22n) + 1420070400000n;
const createdAt = new Date(Number(createdAtMs));
const unixSeconds = Math.floor(Number(createdAtMs) / 1_000);
console.log(createdAt.toISOString()); // 2024-01-24T21:56:25.579Z
console.log(`<t:${unixSeconds}:F>`); // <t:1706133385:F>
Use BigInt for the shift, then convert only the resulting millisecond value. A snowflake’s creation time is metadata assigned by Discord; it is not interchangeable with an author-chosen inline tag. Validate that the ID is a decimal integer and that the decoded date falls after 2015 in the expected range for your data set. Open the Discord Snowflake converter to turn a message ID into a timestamp without doing the bit arithmetic by hand.
Inline timestamp or Discord Scheduled Event?
An inline timestamp is useful inside an announcement, checklist, incident update, or generated message. It is lightweight and keeps the time beside the surrounding explanation. A Discord Scheduled Event is a separate server feature with event details and an Interested workflow that can notify participating members when the event goes live. Discord documents the setup and permission model in its Scheduled Events support guide.
Use the feature that matches the job. A short deadline may need only F plus R. A community session that benefits from discovery and participation tracking may warrant a Scheduled Event, with inline timestamps repeated in channel announcements. The two approaches can complement each other.
Troubleshooting a tag that stays as raw text
- Check angle brackets and colons. The complete shape is
<t:UNIX_SECONDS:STYLE>, not parentheses, braces, or an ISO date. - Use whole Unix seconds. Convert a millisecond API value before placing it in the tag.
- Check letter case. Only the nine documented, case-sensitive styles belong in the style position.
- Remove code formatting. Backticks are useful for showing raw syntax in a tutorial but intentionally present text as code rather than normal message formatting.
- Test the intended context. Discord documents inline timestamp message formatting, but distinct fields and surfaces can have different formatting behavior.
- Check range and plausibility. A syntactically valid integer can still represent an unsupported or unintended date.
Ready to create a tag? Select the source date and timezone, compare all nine formats, or paste an existing tag to inspect its Unix seconds and style. If it stays raw, use the common Discord timestamp fixes.
Open the Discord Timestamp GeneratorFrequently asked questions
What are the nine Discord timestamp style letters?
Discord currently documents t, T, d, D, f, F, s, S, and R. They select time-only, date-only, combined, compact combined, or relative presentations.
What happens if I omit the style?
The current Discord reference marks lowercase f as the default. Therefore <t:1800000000> uses the Long Date, Short Time presentation.
What is the difference between f and F?
Both show a date and short time. Uppercase F adds the weekday and uses the Full Date, Short Time style, while lowercase f is the more compact default.
What is the difference between s and S?
Both are compact short-date combinations. Lowercase s uses Short Time, while uppercase S uses Medium Time and therefore includes seconds in the documented example structure.
Which format creates a countdown?
Use R for Relative Time. Pair it with F when readers also need an absolute weekday, date, and time.
Why does the timestamp look different to another person?
Discord says timestamps display in the user’s timezone and locale. Date order, clock style, language, and wall-clock time can differ while the Unix value still identifies the same instant.
Can I put milliseconds inside the tag?
No—convert them first. Discord documents the value as seconds. Divide known epoch milliseconds by 1,000 using an explicit policy for any sub-second remainder.
Do I need a bot to use a generated timestamp?
The generator produces text in Discord’s documented inline timestamp syntax. Paste it into a normal supported message context and test the result; no bot calculation is required merely to create the text.
Can I convert multiple dates to Discord timestamps at once?
Yes. LiveParse accepts up to 500 non-empty lines of Unix seconds, existing tags, dates, or dates with times and returns tags for all nine styles.
Is this the same as a message’s creation timestamp?
No. An inline tag is content chosen by the message author and can represent a past or future instant. The message creation time is metadata assigned when the message is sent.
Can I convert a Discord message ID to a timestamp?
Yes. Shift the snowflake ID right by 22 bits and add Discord’s epoch, 1420070400000 milliseconds. The result is the object’s creation time in Unix milliseconds; divide by 1,000 for an inline tag.
Do Discord timestamps repeat automatically?
No. Each tag represents one instant. For a weekly event, generate a separate timestamp for each occurrence; a bot can automate that from a schedule.
Can I use a timestamp in a Discord channel name?
No. Discord channel names do not process message-formatting tags. Type the date and time as plain text in the channel-name field.
Can I use a Discord timestamp in my profile bio?
Discord profile bios display plain text and do not render timestamp tags. A pasted <t:…> code appears literally. Use a readable date such as Joined March 2024 instead.
Primary references
- Discord API Reference: Message Formatting — syntax, seconds, viewer locale/timezone behavior, and the current nine-style table.
- Discord Support: Scheduled Events — event creation, permissions, participation, and notification behavior.
- POSIX.1-2024: Seconds Since the Epoch — the underlying Unix-seconds definition.
LiveParse is not affiliated with or endorsed by Discord.