将日期和时间格式化成strftime()
的格式。
时间可以是unix的
时间戳,
DateTime 对象, mysql时间戳,或者月日年格式的字符串,与PHP函数strtotime()
类似。
模板设计者可以对date_format
的格式有完全的控制。
如果传递到date_format
的时间为空,
而第二个参数传递了值,那么第二个参数将作为需要格式化的时间。
参数顺序 | 类型 | 必选参数 | 默认值 | 说明 |
---|---|---|---|---|
1 | string | No | %b %e, %Y | 输出时间的格式定义 |
2 | string | No | n/a | 如果输入为空,则作为默认时间。 |
从Smarty-2.6.10开始,给date_format
传递
数字值将一直被当作unix时间戳(除了mysql时间戳,看下文)。
在Smarty-2.6.10之前,数字值(如 YYYYMMDD
)使用了php函数strtotime()
来进行处理,
所以有时候值会被看作时间字符串而不是时间戳(取决于strtotime()
的实现)。
唯一的例外mysql时间戳:14位数字值(YYYYMMDDHHMMSS
),
mysql时间戳比unix时间戳更优先匹配。
date_format
是派生于PHP函数
strftime()
的wrapper。
在PHP编译时strftime()
的支持格式的数量将会受到系统影响。
请系统的说明找出完整的格式列表。
然而,部分格式是模拟了windows的行为,如 %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')); ?>
模板使用了
$smarty.now
取得当前的时间:
{$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}
输出是:
Jan 1, 2022 01/01/22 02:33 pm Dec 31, 2021 Monday, December 1, 2021 14:33:00
date_format支持格式:
%a - 当前区域星期几的简写
%A - 当前区域星期几的全称
%b - 当前区域月份的简写
%B - 当前区域月份的全称
%c - 当前区域首选的日期时间表达
%C - 世纪值(年份除以 100 后取整,范围从 00 到 99)
%d - 月份中的第几天,十进制数字(范围从 01 到 31)
%D - 和 %m/%d/%y 一样
%e - 月份中的第几天,十进制数字,一位的数字前会加上一个空格(范围从 ' 1' 到 '31')
%g - 和 %G 一样,但是没有世纪
%G - 4 位数的年份
%h - 和 %b 一样
%H - 24 小时制的十进制小时数(范围从 00 到 23)
%I - 12 小时制的十进制小时数(范围从 00 到 12)
%j - 年份中的第几天,十进制数(范围从 001 到 366)
%k - 小时,24 小时格式,没有前导零
%l - 小时,12 小时格式,没有前导零
%m - 十进制月份(范围从 01 到 12)
%M - 十进制分钟数
%n - 换行符
%p - 根据给定的时间值为 `am' 或 `pm',或者当前区域设置中的相应字符串
%r - 用 a.m. 和 p.m. 符号的时间
%R - 24 小时符号的时间
%S - 十进制秒数
%t - 制表符
%T - 当前时间,和 %H:%M:%S 一样
%u - 星期几的十进制数表达 [1,7],1 表示星期一
%U - 本年的第几周,从第一周的第一个星期天作为第一天开始
%V - 本年第几周的 ISO 8601:1988 格式,范围从 01 到 53,第 1 周是本年第一个至少还有 4 天的星期,星期一作为每周的第一天。(用 %G 或者 %g 作为指定时间戳相应周数的年份组成。)
%w - 星期中的第几天,星期天为 0
%W - 本年的第几周数,从第一周的第一个星期一作为第一天开始
%x - 当前区域首选的时间表示法,不包括时间
%X - 当前区域首选的时间表示法,不包括日期
%y - 没有世纪数的十进制年份(范围从 00 到 99)
%Y - 包括世纪数的十进制年份
%Z - 时区名或缩写
%% - 文字上的 `%' 字符
参见 $smarty.now
,
strftime()
,
{html_select_date}
和 时间技巧文章.