Skip to content

date_format

date_format 用于将日期和时间格式化为给定的 strftime() 格式。日期可以作为 Unix 时间戳DateTime 对象、MySQL 时间戳或任何可由 PHP 的 strtotime() 解析的字符串传递给 Smarty。设计者可以使用 date_format 来完全控制日期的格式化。如果传递给 date_format 的日期为空,并且传递了第二个参数,则该参数将用作要格式化的日期。

基本用法

{$myVar|date_format:"%Y-%m-%d"}

参数

参数位置 类型 必需 默认值 描述
1 字符串 %b %e, %Y 输出日期的格式。
2 字符串 n/a 如果输入为空,则使用此默认日期。

注意

自 Smarty-2.6.10 起,传递给 date_format 的数字值始终被解释为 Unix 时间戳(除了 MySQL 时间戳,参见下文)。

在 Smarty-2.6.10 之前,也可以将可由 strtotime() 在 PHP 中解析的数字字符串(如 YYYYMMDD)解释为日期字符串,而不是时间戳。这取决于 strtotime() 的底层实现。

唯一的例外是 MySQL 时间戳:它们也是仅数字的,长度为 14 位的字符串(YYYYMMDDHHMMSS),MySQL 时间戳优先于 Unix 时间戳。

注意

date_format 本质上是 PHP 的 strftime() 函数的封装。根据 PHP 编译时所使用的系统的 strftime() 函数的不同,您可能会有更多或更少的转换说明符可用。请查阅您的系统的 man 页面以获取有效说明符的完整列表。但是,在 Windows 上,有一些说明符是模拟的。它们是:%D、%e、%h、%l、%n、%r、%R、%t 和 %T。

示例

<?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,其中第一周是当前年份中至少有 4 天的第一周,并以星期一作为一周的第一天。
  • %w - 星期几,十进制数,星期日为 0
  • %W - 当年的周数,十进制数,以第一个星期一作为第一周的第一天开始计算
  • %x - 当前区域设置下的首选日期表示,不包括时间
  • %X - 当前区域设置下的首选时间表示,不包括日期
  • %y - 十进制数年份,不包括世纪(范围为 00 到 99)
  • %Y - 包括世纪的十进制数年份
  • %Z - 时区或名称或缩写
  • %% - 字面上的 '%' 字符

另请参阅 $smarty.nowstrftime(){html_select_date}date tips 页面。