Reference
Number and date filters
Round numbers, pick plurals and format numbers and dates with Intl.
These filters round numbers and format numbers and dates for readers. Formatting uses the JavaScript Intl API, so it handles locales, currencies and time zones without extra libraries.
abs
Returns the absolute value of a number.
{{ (-5)|abs }}
5
Note the brackets. Filters bind tighter than a minus sign, so -5|abs means -(5|abs).
round
Rounds to a number of decimal places, 0 by default. The second argument is the method: "common" (the default, which rounds halves away from zero), "ceil" or "floor".
{{ 3.14159|round(2) }}
{{ 2.5|round }}
{{ 2.1|round(0, "ceil") }}
3.14
3
3
formatNumber
Formats a number with Intl.NumberFormat. Pass any of its options as named arguments, plus locale. Option values must be strings, numbers or booleans, and an option name Intl doesn't know is an error.
{{ 1234567.891|formatNumber }}
{{ 49.5|formatNumber(style: "currency", currency: "GBP") }}
{{ 0.256|formatNumber(style: "percent") }}
{{ 1234.5|formatNumber(locale: "de-DE", minimumFractionDigits: 2) }}
1,234,567.891
£49.50
26%
1.234,50
plural
Picks the word or phrase that fits a number, using the plural rules of the render's locale. Pass the forms as named arguments. Every # in the chosen form becomes the number, formatted for the locale.
{{ 1|plural(one: "# item", other: "# items") }}
{{ 1200|plural(one: "# item", other: "# items") }}
{{ 3|plural("item", "items") }}
1 item
1,200 items
items
- Two forms without names are
oneandother, which covers English. otheris required. It is used when the locale's form for the number isn't passed.- The names are the ones
Intl.PluralRulesuses:zero,one,two,few,manyandother. Which a number gets depends on the language. In English, 0 isother, so useiffor wording like "No items". - Pass
type: "ordinal"for positions, such as 1st and 2nd, andlocaleto use another language's rules.
{{ 22|plural(one: "#st", two: "#nd", few: "#rd", other: "#th", type: "ordinal") }}
{{ 5|plural(one: "# plik", few: "# pliki", many: "# plików", other: "# pliku", locale: "pl") }}
22nd
5 plików
formatDate
Formats a date with Intl.DateTimeFormat. It accepts a Date, an ISO 8601 string or milliseconds since 1970. A day past the end of its month, such as 2026-02-30, is an error. Pass any of its options as named arguments, plus locale and timeZone. Option values must be strings, numbers or booleans. The default style is dateStyle: "medium", unless you pass an option that chooses what to show, such as timeStyle, month or hour.
{{ "2026-10-15"|formatDate }}
{{ "2026-10-15"|formatDate(dateStyle: "long", locale: "en-GB") }}
{{ "2026-10-15T14:30:00Z"|formatDate(timeStyle: "short", timeZone: "Europe/London") }}
{{ "2026-10-15"|formatDate(weekday: "long", day: "numeric", month: "long") }}
Oct 15, 2026
15 October 2026
3:30 PM
Thursday, October 15
A date and time without an offset, such as 2026-10-15T10:00, is read as UTC. So is a date on its own: 2026-10-15 is midnight UTC, which a time zone behind UTC, such as America/New_York, shows as the day before. Pass timeZone: "UTC" to show a date on its own as written.
{{ "2026-10-15"|formatDate(timeZone: "America/New_York") }}
{{ "2026-10-15"|formatDate(timeZone: "UTC") }}
Oct 14, 2026
Oct 15, 2026
Locale and time zone
These filters use the render's locale and time zone unless you pass them. These default to "en" and "UTC", so output is the same on every server. Set them for the environment or for one render. See Creating an environment.
Missing values
formatNumber, plural and formatDate print nothing for null. An empty field never turns into 0 or today's date.
<time>{{ post.publishedAt|formatDate }}</time>
<time></time>