Smarty是什么?
为什么要使用它?
用例和工作流程
语法比较
模板继承
最佳实践
速成教程
这会按照给定的 strftime()
格式将日期和时间格式化。可以使用 unix 时间戳、DateTime 对象、mysql 时间戳或任何可被 PHP strtotime()
解析的由月日年组成的字符串的形式将日期传递到 Smarty。然后,设计人员可以使用 date_format
完全控制日期的格式化。如果传递给 date_format
的日期是空的并且传递了第二个参数,则该参数将用作要格式化的日期。
参数位置 | 类型 | 必需 | 默认值 | 描述 |
---|---|---|---|---|
1 | 字符串 | 否 | %b %e, %Y | 这是输出日期的格式。 |
2 | 字符串 | 否 | 不适用 | 如果输入为空,这是默认日期。 |
自 Smarty-2.6.10 起,传递给 date_format
的数值(mysql 时间戳除外,见下文)始终会被解释为 unix 时间戳。
在 Smarty-2.6.10 之前,PHP 中还可被 strtotime()
解析的数字字符串(如 YYYYMMDD
)有时(取决于 strtotime()
的底层实现)会被解释为日期字符串,而不是时间戳。
唯一的例外是 mysql 时间戳:它们也只有数字且有 14 个字符 (YYYYMMDDHHMMSS
),mysql 时间戳优先于 unix 时间戳。
date_format
本质上是 PHP strftime()
函数的封装器。根据编译 PHP 时系统 strftime()
函数的转换说明符,可能会有更多或更少的转换说明符可用。请查看系统的手册页以了解有效说明符的完整列表。但是,在 Windows 上模拟了几个说明符。它们是:%D、%e、%h、%l、%n、%r、%R、%t、%T。
示例 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 - 世纪内基于星期的年份 [00,99]
%G - 基于星期的年份,包括世纪 [0000,9999]
%h - 与 %b 相同
%H - 使用 24 小时制显示的小时数,十进制数(范围为 00 到 23)
%I - 使用 12 小时制显示的小时数,十进制数(范围为 01 至 12)
%j - 作为十进制数的年数中的日期(范围为 001 至 366)
%k - 24 小时制小时数,个位数前面有空格。(范围为 0 至 23)
%l - 使用 12 小时制显示的小时数,十进制数,个位数前面有空格(范围为 1 至 12)
%m - 月份,十进制数(范围为 01 至 12)
%M - 分钟数,十进制数
%n - 换行符
%p - 根据给定的时间值显示“am”或“pm”,或显示当前区域设置的对应字符串
%r - 上午/下午时间表示法中的时间
%R - 24 小时表示法中的时间
%S - 秒数,十进制数
%t - 制表符
%T - 当前时间,等于 %H:%M:%S
%u - 星期数,十进制数 [1,7],其中 1 代表星期一
%U - 当年作为十进制数的周数,从第一个星期日作为第一周的第一天开始
%V - 当前年份的 ISO 8601:1988 周数(十进制数,范围为 01 至 53),其中第 1 周是在当年至少有 4 天的第一周,星期一为一周的第一天。
%w - 作为十进制数的星期数,星期天为 0
%W - 当年作为十进制数的周数,从第一个星期一作为第一周的第一天开始
%x - 常规的日期表示,不带时间,根据当前区域设置
%X - 常规的时间表示,不带日期,根据当前区域设置
%y - 不含世纪数的年份,十进制数(范围为 00 至 99)
%Y - 包含世纪数的年份,十进制数
%Z - 时区或名称或缩写
%% - 文本 % 字符
另请参见 $smarty.now
、strftime()
、{html_select_date}
和 日期技巧 页面。