epochkit

Slack Timestamp Generator

Generate <!date^UNIX^TOKEN|fallback> syntax for messages your app posts to Slack.
Custom tokens, preset formats, live preview.

A Slack timestamp is message markup (mrkdwn) in the form <!date^UNIX^TOKEN|fallback> — a Unix timestamp in seconds, a token string such as {date_short_pretty} at {time}, and plain-text fallback — that Slack renders as a formatted date in each viewer's local timezone. Slack documents it for app-published text: the messages your app sends through the Web API or an incoming webhook. This generator builds the full syntax from any date, time, and token combination, with a live preview.

Presets

Date + time
Slackbot Today at 12:00

Reminder: today at 12:29 PM

<!date^1785673793^{date_short_pretty} at {time}|Aug 2, 2026 at 12:29 UTC>
Long date + time
Slackbot Today at 12:00

Reminder: today at 12:29 PM

<!date^1785673793^{date_long_pretty} at {time}|Aug 2, 2026 at 12:29 UTC>
Date only
Slackbot Today at 12:00

Reminder: today

<!date^1785673793^{date_pretty}|Aug 2, 2026 at 12:29 UTC>
Time only
Slackbot Today at 12:00

Reminder: 12:29 PM

<!date^1785673793^{time}|Aug 2, 2026 at 12:29 UTC>
Time with seconds
Slackbot Today at 12:00

Reminder: 12:29:53 PM

<!date^1785673793^{time_secs}|Aug 2, 2026 at 12:29 UTC>
Full date + time
Slackbot Today at 12:00

Reminder: today at 12:29:53 PM

<!date^1785673793^{date_long_pretty} at {time_secs}|Aug 2, 2026 at 12:29 UTC>

Custom token

Custom token string
Slackbot Today at 12:00

Reminder: today at 12:29 PM

<!date^1785673793^{date_short_pretty} at {time}|Aug 2, 2026 at 12:29 UTC>

How to use

1

Set date, time, and timezone

Pick when the event happens. Slack converts the timestamp to each viewer's local timezone automatically.

2

Choose a preset or build a custom token

Click a preset card's copy button, or use the token buttons to build a custom format. Add a fallback for email and non-Slack clients. Smart tokens like {date_pretty} automatically render as "today" or "yesterday" when appropriate.

3

Send it from your app

Put the <!date^...> syntax in the text your app publishes through the Slack Web API or an incoming webhook. Slack renders it as a timezone-aware date for each viewer. The syntax is documented for app-published text, not for messages typed into the composer.

Token reference

Token Name
{date_num} Date (numeric)
{date} Date
{date_short} Date (short)
{date_long} Date (long)
{date_pretty} Date (smart)
{date_short_pretty} Short date (smart)
{date_long_pretty} Long date (smart)
{time} Time
{time_secs} Time with seconds
{ago} Relative

Smart tokens (date_pretty, date_short_pretty, date_long_pretty) render as "today", "yesterday", or "tomorrow" when applicable. All date tokens except date_num omit the year when the date is within ±6 months of now.

Slack date formatting explained

Slack date formatting embeds a Unix timestamp in a message using the <!date^UNIX^TOKEN_STRING|FALLBACK> syntax and renders it in each viewer's local timezone — the same viewer-local principle behind Discord's <t:UNIX:F> markup. The UNIX value counts seconds since January 1, 1970 UTC, so the moment it describes is unambiguous regardless of who wrote the message or where. What sets Slack apart is composability: the token string mixes any number of tokens with literal text, so {date_short_pretty} at {time} renders as "May 9, 2026 at 6:00 PM" as a single unit, in the reader's own timezone and in Slack's own date style. Slack documents the syntax for app-published text — the messages an app sends through the Web API or an incoming webhook — and an app-published message carries it into channels, direct messages, and threads alike. Typing the tag into the composer by hand is not a documented use, so route announcements that need it through a webhook or workflow you control.

The FALLBACK field is the plain text after the pipe character, and it is what recipients see whenever Slack cannot render the tag — in email notifications, some third-party integrations, and older API clients. A good fallback states the date, time, and timezone explicitly — for example, "May 9, 2026 at 18:00 UTC" — so recipients know exactly when something happens even without the rendered version. This tool generates a matching fallback automatically from the date and timezone you select, and you can edit it before copying.

Slack timestamps are especially useful for reminders, event invites, and release announcements published by a bot or integration to a team that spans multiple timezones. Instead of a message that hard-codes "the meeting is at 3 PM EST," a Slack timestamp adapts to each person's local time automatically. For recurring schedules, have the job that owns the schedule post the message through the Slack API on the cadence you need.

Slack's smart tokens — date_pretty, date_short_pretty, and date_long_pretty — render as "today", "yesterday", or "tomorrow" when the timestamp falls on those days in the viewer's timezone. For all date tokens except date_num, Slack omits the year when the date is within roughly six months of now, keeping messages compact. Use date_num (e.g., 2026-05-09) when you need a stable, year-included ISO-style date for log lines or audit trails.

Frequently asked questions

How do Slack date formatting strings work?

Slack documents the <!date^UNIX^TOKEN_STRING|FALLBACK> syntax for app-published text — the messages your app posts through the Web API or an incoming webhook. The UNIX value is a Unix timestamp in seconds, the TOKEN_STRING contains one or more tokens like {date_pretty} or {time}, and the FALLBACK is plain text shown when Slack cannot render the timestamp (e.g., in email notifications or API clients). Slack renders the timestamp in the viewer's local timezone automatically. A token like {date_pretty} may also render as "today" or "yesterday" depending on when the message is read.

Can I use multiple tokens in one date string?

Multiple tokens can be combined freely in a single token string. For example, {date_short_pretty} at {time} renders as "May 9, 2026 at 6:00 PM" in the viewer's timezone. Slack substitutes each token independently and leaves any literal text between them untouched. There is no documented limit on the number of tokens, but keep the string readable.

Can I type the <!date^...> syntax into a Slack message myself?

The Slack documentation presents date formatting as a feature of app-published text, so the supported path is text your app posts through the Web API or an incoming webhook. Typing the tag into the message composer by hand is not a documented use. An app-published message renders the tag the same way wherever it lands — channel, direct message, or thread — so if you want a viewer-local date in an announcement you would otherwise type manually, post it through a webhook or workflow you control.

Can I use a Slack timestamp for a time in the past?

Slack date formatting accepts any Unix timestamp — past, present, or future. A past timestamp renders as the formatted date, exactly as a future one would, and smart tokens like {date_pretty} show "yesterday" when the date qualifies. For elapsed time rather than a date, the documented token is {ago}, which renders as a human-readable period such as "3 minutes ago". Discord takes a different approach: its relative style renders a countdown that updates live in the client, so use the Discord timestamp generator if that is the behavior you need.

What is the fallback text and when does it appear?

The fallback text (the part after the pipe |) is shown when Slack cannot render the <!date^...> tag. This happens in email notifications, some third-party integrations, and older Slack API clients. A good fallback includes the date and timezone explicitly, for example: "May 9, 2026 at 18:00 UTC".

Why does {date_pretty} show "today" sometimes and an explicit date other times?

{date_pretty} is a smart token. Slack renders it as "today", "yesterday", or "tomorrow" if the timestamp falls on one of those days in the viewer's local timezone. Otherwise it shows the full date, e.g. "May 9th, 2026". The year is also omitted automatically when the date is within roughly six months of now. Use {date} if you always want the explicit date with no substitution.

Learn more

Other tools you might find useful