Format timestamp with custom format: timestamp_custom
The timestamp_custom filter formats a UNIX timestamp into a human-readable string using a format pattern you specify. Give it a timestamp and a format string like “%H:%M” or “%Y-%m-%d”, and it returns the formatted date and time.
This is useful whenever you have a UNIX timestamp (a number of seconds since January 1, 1970) and want to display it in a specific format. Many sensorsSensors return information about a thing, for instance the level of water in a tank. [Learn more] expose timestamps as attributes, and external APIs often return times as UNIX timestamps. With timestamp_custom, you can turn those numbers into readable dates and times in exactly the format you need. By default, the timestamp is converted to your local time zone, but you can set the second parameter to false to keep it in UTC.
Usage
Here’s how to use this template function. Copy any example and adjust it to your setup.
{{ 1710510600 | timestamp_custom("%H:%M") }}
14:30
Function signature
The signature is a technical summary of this template function. It shows the name of the function, the values (called parameters) it accepts, and what type of data each parameter expects (for example, a piece of text or a number).
Function parameters that have a = with a value after them are optional. If you leave them out, the default value shown is used automatically. Function parameters without a default are required.
value | timestamp_custom(
format_string: str = "%Y-%m-%d %H:%M:%S",
local_time: bool = True,
default: Any = None,
) -> str | Any
Function parameters
The following parameters can be provided to this filter.
The format string describing the desired output. Uses Python strftime format codes such as %Y (year), %m (month), %d (day), %H (hour), %M (minute), %S (second).
Whether to convert the timestamp to the local time zone before formatting. Set to false to format in UTC.
Formatting in UTC
By default, timestamp_custom converts the timestamp to your local time zone. Pass false as the second argument to format in UTC instead.
{{ 1710510600 | timestamp_custom("%H:%M", false) }}
13:30
Common format patterns
Here are some patterns that cover the formats you need most often:
-
%Y-%m-%dproduces2024-03-15 -
%H:%Mproduces14:30 -
%H:%M:%Sproduces14:30:00 -
%d/%m/%Yproduces15/03/2024 -
%A, %B %dproducesFriday, March 15 -
%I:%M %pproduces02:30 PM
Good to know
- The input must be a UNIX timestamp (a number of seconds). Pass a datetime object through
as_timestampfirst. - The timestamp is converted to your Home Assistant time zone by default. Pass
falseas the second argument to format in UTC instead. - Without a
default, the filter raises an error for non-numeric inputs. Provide one to keep templates from breaking on unavailable sensors.
Try it yourself
Ready to test this? Open Developer tools > Template, paste the example into the Template editor, and watch the result update on the right. Edit the values to see how the function adapts to your own entitiesAn entity represents a sensor, actor, or function in Home Assistant. Entities are used to monitor physical properties or to control other entities. An entity is usually part of a device or a service. [Learn more].
More examples
Real scenarios where this function comes up in automations and templates. Copy any example and adapt it to your setup.
Format last changed time
Convert an entity’s last changed time to a UNIX timestamp with as_timestamp and then format it.
{{
as_timestamp(states.sensor.temperature.last_changed)
| timestamp_custom("%H:%M")
}}
14:30
Display a full date and time
Format a timestamp as a complete, human-readable date and time string.
{{ as_timestamp(now()) | timestamp_custom("%A, %B %d at %H:%M") }}
Friday, March 15 at 14:30
Using a default value
If a sensor might provide an invalid timestamp, use a default to avoid errors.
{{
states("sensor.last_event") | float(0)
| timestamp_custom("%Y-%m-%d", default="unknown")
}}
2024-03-15
Still stuck?
The Home Assistant community is quick to help: join Discord for real-time chat, post on the community forum with your template and expected result, or share on our subreddit /r/homeassistant.
AI assistants like ChatGPT or Claude can also explain or fix templates when you describe what you want in plain language.
Related template functions
These functions work well alongside this one:
-
Format timestamp as local time: timestamp_local - Formats a UNIX timestamp as a local datetime string.
-
Format timestamp as UTC time: timestamp_utc - Formats a UNIX timestamp as a UTC datetime string.
-
Convert to UNIX timestamp: as_timestamp - Converts a datetime object or string to a UNIX timestamp.
-
Parse a time string: strptime - Parses a time string with a specified format into a datetime object.