This formats a date and time into the given strftime() format. Dates can be passed to Smarty as unix timestamps, DateTime objects, 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.


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


$config['date'] = '%I:%M %p';
$config['time'] = '%H:%M:%S';
$smarty->assign('config', $config);
$smarty->assign('yesterday', strtotime('-1 day'));



This template uses $ to get the current time:

{$yesterday|date_format:"%A, %B %e, %Y"}


This above will output:

Jan 1, 2022
02:33 pm
Dec 31, 2021
Monday, December 1, 2021


date_format conversion specifiers:

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