strftime 是什么?
strftime 是一个源自 C 语言库的时间格式化函数,被 PHP 等多种编程语言所采纳,它的全称是 "String Format Time"(字符串格式化时间)。

(图片来源网络,侵删)
在 DedeCMS 中,它被封装成一个可以在模板中直接使用的全局函数,通常写作 strftime() 或 {dede:strftime} 标签形式。
核心作用: 将一个 Unix 时间戳(或一个格式化的时间字符串)转换为你所需要的、任意格式的时间日期字符串。
strftime 的基本语法
在 DedeCMS 模板中,主要有两种使用方式:
作为普通函数使用(最常见)
这是最简单、最直接的使用方式,通常用于简单的日期显示。

(图片来源网络,侵删)
{dede:field function='strftime("格式化字符串", @me)'/}
参数解析:
"格式化字符串": 这是必需的参数,它定义了你希望输出的时间日期格式,里面包含各种格式化字符(见下文列表)。@me: 这是 DedeCMS 模板中的特殊变量,代表当前正在处理的数据,对于时间字段,@me通常就是该字段的 Unix 时间戳,DedeCMS 的strftime函数会自动将其识别为时间戳进行处理,所以这个@me是必须的。
示例:
假设文章的发布时间 pubdate 字段存储的时间戳是 1672531200 (对应 2025-01-01 00:00:00)。
-
显示
YYYY-MM-DD格式:
(图片来源网络,侵删){dede:field.pubdate function='strftime("%Y-%m-%d", @me)'/} <!-- 输出: 2025-01-01 --> -
显示
YYYY年MM月DD日格式:{dede:field.pubdate function='strftime("%Y年%m月%d日", @me)'/} <!-- 输出: 2025年01月01日 --> -
显示完整的日期和时间:
{dede:field.pubdate function='strftime("%Y-%m-%d %H:%M:%S", @me)'/} <!-- 输出: 2025-01-01 00:00:00 -->
作为 dede 标签使用
这种方式通常用在循环标签(如 {dede:arclist})中,用于对列表中的每个条目进行时间格式化。
{dede:arclist titlelen='30' orderby='pubdate'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function='strftime("%Y-%m-%d", @me)'/]</span>
</li>
{/dede:arclist}
[field:pubdate function='strftime("%Y-%m-%d", @me)'/] 的作用和第一种方式完全一样,只是写法上嵌套在了 arclist 标签内部。
常用格式化字符 (占位符)
strftime 的强大之处在于其丰富的格式化字符,以下是最常用的一些:
| 格式字符 | 说明 | 示例 (2025-10-27 15:30:45) |
|---|---|---|
%Y |
4位数的年份 (Year) | 2025 |
%y |
2位数的年份 (Year) | 23 |
%m |
2位数的月份 (Month) | 10 |
%d |
2位数的日期 (Day) | 27 |
%H |
24小时制的小时 (Hour) | 15 |
%h |
12小时制的小时 (Hour) | 03 |
%i |
12小时制的小时,带前导零 (Hour) | 03 |
%M |
分钟 (Minute) | 30 |
%S |
秒 (Second) | 45 |
%A |
完整的星期名称 (e.g., Friday) | 星期五 |
%a |
缩写的星期名称 (e.g., Fri) | 周五 |
%B |
完整的月份名称 (e.g., October) | 十月 |
%b |
缩写的月份名称 (e.g., Oct) | 10月 |
%w |
数字表示的星期 (0是星期日, 6是星期六) | 5 |
%W |
一年中的第几周(从周一开始) | 43 |
组合使用示例:
"%Y年%m月%d日 %H:%M"->2025年10月27日 15:30"%m/%d/%Y"->10/27/2025"%b %d, %Y"->10月27, 2025发布于 %Y-%m-%d %A"->发布于 2025-10-27 星期五
与 MyDate 函数的区别
在 DedeCMS 中,你还会遇到另一个时间格式化函数 MyDate,它们功能相似,但有一些细微差别:
| 特性 | strftime |
MyDate |
|---|---|---|
| 来源 | 标准 C/PHP 函数,DedeCMS 封装 | DedeCMS 自定义函数 |
| 主要参数 | 格式化字符串, 时间戳 |
格式化字符串, 时间戳 |
| 国际化支持 | 支持,可以根据服务器环境设置不同的语言,显示星期、月份的本地化名称。 | 不支持,星期和月份名称固定为中文(如“星期五”、“十月”)。 |
| 字符集 | 依赖于 PHP 环境的 setlocale() 设置。 |
不依赖,直接输出中文。 |
如何选择?
-
使用
strftime:- 当你需要显示英文或其他语言的日期时。
- 当你希望日期格式完全遵循标准规范时。
- 在绝大多数情况下,
strftime是更优、更标准的选择。
-
使用
MyDate:- 当你只需要简单的中文日期格式,并且不希望受服务器
setlocale设置影响时。 - 在一些非常老的 DedeCMS 版本或特定模板中可能更常见。
- 当你只需要简单的中文日期格式,并且不希望受服务器
示例对比:
假设服务器环境设置为中文。
strftime("%A", @me)->星期五MyDate("Y-m-d A", @me)->2025-10-27 下午
如果服务器环境设置为英文 (en_US):
strftime("%A", @me)->FridayMyDate("Y-m-d A", @me)-> 仍然是2025-10-27 下午(不受影响)
| 特性 | 描述 |
|---|---|
| 定义 | DedeCMS 中用于格式化时间日期的核心函数。 |
| 作用 | 将 Unix 时间戳转换为自定义格式的日期字符串。 |
| 标准用法 | {dede:field.时间字段 function='strftime("格式", @me)'/} |
| 核心 | 熟练掌握各种格式化字符(如 %Y, %m, %d, %H 等)是关键。 |
| 推荐 | 优先使用 strftime,因为它更标准、更灵活,支持国际化。 |
掌握了 strftime,你就可以在 DedeCMS 模板中随心所欲地控制任何日期时间的显示样式,是模板开发必备的技能。
