Smarty Manual
Prev | Chapter 5. Variable Modifiers | Next

# date_format

This formats a date and time into the given `strftime()` format. Dates can be passed to Smarty as unix timestamps, mysql timestamps or any string made up of month day year, parsable by php's `strtotime()`. Designers can then use `date_format` to have complete control of the formatting of the date. If the date passed to `date_format` is empty and a second parameter is passed, that will be used as the date to format.

Parameter Position | Type | Required | Default | Description
--- | --- | --- | --- | ---
1 | string | No | %b %e, %Y | This is the format for the outputted date.
2 | string | No | n/a | This is the default date if the input is empty.

> Note: Since Smarty-2.6.10 numeric values passed to `date_format` are always (except for mysql timestamps, see below) interpreted as a unix timestamp.

> Before Smarty-2.6.10 numeric strings that where also parsable by `strtotime()` in php (like `YYYYMMDD`) where sometimes (depending on the underlying implementation of `strtotime()`) interpreted as date strings and NOT as timestamps.

> The only exception are mysql timestamps: They are also numeric only and 14 characters long (`YYYYMMDDHHMMSS`), mysql timestamps have precedence over unix timestamps.

> Programmers note: `date_format` is essentially a wrapper to PHP's `strftime()` function. You may have more or less conversion specifiers available depending on your system's `strftime()` function where PHP was compiled. Check your system's manpage for a full list of valid specifiers. However, a few of the specifiers are emulated on Windows. These are: %D, %e, %h, %l, %n, %r, %R, %t, %T.

Example 5-8. date_format
`<?php $config['date'] = '%I:%M %p'; $config['time'] = '%H:%M:%S'; $smarty->assign('config', $config); $smarty->assign('yesterday', strtotime('-1 day')); ?>`
This template uses `$smarty.now` to get the current time:
    {$smarty.now|date_format}
    {$smarty.now|date_format:"%D"}
    {$smarty.now|date_format:$config.date}
    {$yesterday|date_format}
    {$yesterday|date_format:"%A, %B %e, %Y"}
    {$yesterday|date_format:$config.time}
This above will output:
    Jan 1, 2022
    01/01/22
    02:33 pm
    Dec 31, 2021
    Monday, December 1, 2021
    14:33:00

date_format conversion specifiers:

- %a - abbreviated weekday name according to the current locale

- %A - full weekday name according to the current locale

- %b - abbreviated month name according to the current locale

- %B - full month name according to the current locale

- %c - preferred date and time representation for the current locale

- %C - century number (the year divided by 100 and truncated to an integer, range 00 to 99)

- %d - day of the month as a decimal number (range 01 to 31)

- %D - same as %m/%d/%y

- %e - day of the month as a decimal number, a single digit is preceded by a space (range 1 to 31)

- %g - Week-based year within century [00,99]

- %G - Week-based year, including the century [0000,9999]

- %h - same as %b

- %H - hour as a decimal number using a 24-hour clock (range 00 to 23)

- %I - hour as a decimal number using a 12-hour clock (range 01 to 12)

- %j - day of the year as a decimal number (range 001 to 366)

- %k - Hour (24-hour clock) single digits are preceded by a blank. (range 0 to 23)

- %l - hour as a decimal number using a 12-hour clock, single digits preceeded by a space (range 1 to 12)

- %m - month as a decimal number (range 01 to 12)

- %M - minute as a decimal number

- %n - newline character

- %p - either `am' or `pm' according to the given time value, or the corresponding strings for the current locale

- %r - time in a.m. and p.m. notation

- %R - time in 24 hour notation

- %S - second as a decimal number

- %t - tab character

- %T - current time, equal to %H:%M:%S

- %u - weekday as a decimal number [1,7], with 1 representing Monday

- %U - week number of the current year as a decimal number, starting with the first Sunday as the first day of the first week

- %V - The ISO 8601:1988 week number of the current year as a decimal number, range 01 to 53, where week 1 is the first week that has at least 4 days in the current year, and with Monday as the first day of the week.

- %w - day of the week as a decimal, Sunday being 0

- %W - week number of the current year as a decimal number, starting with the first Monday as the first day of the first week

- %x - preferred date representation for the current locale without the time

- %X - preferred time representation for the current locale without the date

- %y - year as a decimal number without a century (range 00 to 99)

- %Y - year as a decimal number including the century

- %Z - time zone or name or abbreviation

- %% - a literal `%' character

See also `$smarty.now`, `strftime()`, `{html_select_date}` and the date tips page.

Prev | Home | Next
count_words | Up | default