arclist是织梦最核心、最常用的列表调用标签,功能非常强大,时间的显示主要通过其内部的底层模板变量(如[field:pubdate/])和格式化函数(strftime)来实现。
核心时间变量
在arclist标签中,你可以使用以下与时间相关的底层变量:
| 变量名 | 说明 | 示例输出 |
|---|---|---|
pubdate |
文档发布时间(默认字段) | 2025-10-27 10:30:00 |
senddate |
文档录入时间 | 2025-10-27 10:25:15 |
sortrank |
文档排序时间(通常用于置顶、推荐等) | 1698371400 (Unix时间戳) |
click |
点击次数(虽然不是时间,但常与时间一起使用) | 1256 |
注意: pubdate 是最常用的时间变量,它代表了文章的发布时间,在大多数情况下,你只需要使用 pubdate 就够了。
时间格式化:strftime 函数
直接使用 [field:pubdate/] 得到的是完整的日期时间格式(如 2025-10-27 10:30:00),但通常我们只需要年、月、日,或者特定的格式,这时就需要使用 strftime 函数。
语法:
[field:pubdate function="strftime('格式化字符串', @me)"/]
常用格式化字符串:
| 格式化字符 | 说明 | 示例 |
|---|---|---|
%Y |
4位数字完整年份 | 2025 |
%y |
2位数字年份 | 23 |
%m |
数字月份(有前导0) | 10 |
%d |
日期(有前导0) | 27 |
%H |
小时(24小时制,有前导0) | 10 |
%i |
小时(12小时制,有前导0) | 10 |
%M |
分钟(有前导0) | 30 |
%S |
秒(有前导0) | 00 |
%b |
月份的英文缩写 | Oct |
%a |
星期的英文缩写 | Fri |
%F |
Y-m-d 的简写 |
2025-10-27 |
%D |
m/d/y 的简写 |
10/27/23 |
常用时间显示示例
下面是一些在arclist标签中调用时间的常见写法。
基础调用
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate/]</span>
</li>
{/dede:arclist}
效果:1 2025-10-27 10:30:002 2025-10-26 15:22:11
示例1:只显示年月日 (Y-m-d)
这是最常见的用法。
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="strftime('%Y-%m-%d', @me)"/]</span>
</li>
{/dede:arclist}
效果:1 2025-10-272 2025-10-26
示例2:只显示月日 (m-d)
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="strftime('%m-%d', @me)"/]</span>
</li>
{/dede:arclist}
效果:1 10-272 10-26
示例3:显示中文年月日 (Y年m月d日)
如果想让日期显示为中文格式,可以在strftime中添加中文。
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="strftime('%Y年%m月%d日', @me)"/]</span>
</li>
{/dede:arclist}
效果:1 2025年10月27日2 2025年10月26日
示例4:显示“X天前”或“X小时前”等相对时间
这种“人性化”时间显示在博客和新闻网站中非常流行,织梦没有直接提供这个函数,但可以通过自定义函数实现。
步骤:
- 打开
/include/extend.func.php文件。 - 在文件末尾的
?>之前,添加以下PHP函数:
/**
* 生成相对时间
* @param string $from 时间字符串
* @return string
*/
function formatTime($from)
{
$now = time();
$diff = $now - strtotime($from);
if ($diff < 60) {
return '刚刚';
} elseif ($diff < 3600) {
return floor($diff / 60) . '分钟前';
} elseif ($diff < 86400) {
return floor($diff / 3600) . '小时前';
} elseif ($diff < 2592000) { // 30天
return floor($diff / 86400) . '天前';
} else {
// 如果超过30天,则显示具体日期
return date('Y-m-d', strtotime($from));
}
}
在模板文件中使用这个自定义函数:
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="formatTime(@me)"/]</span>
</li>
{/dede:arclist}
效果:1 2小时前2 刚刚3 15天前
示例5:显示星期几
{dede:arclist titlelen='30' row='5'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="strftime('%Y-%m-%d %a', @me)"/]</span>
</li>
{/dede:arclist}
效果:1 2025-10-27 Fri
arclist标签自带的时间属性
除了在模板里用function格式化,arclist标签本身也提供了一些与时间相关的属性,可以在调用时就进行排序。
orderby='pubdate': 按发布时间降序排列(默认值)。orderby='senddate': 按录入时间降序排列。orderby='sortrank': 按文章排序值(如置顶级别)降序排列。orderway='desc': 降序排列(默认,最新的在前面)。orderway='asc': 升序排列(最旧的在前面)。
示例:调用最新的5篇文章,按发布时间倒序
{dede:arclist titlelen='30' row='5' orderby='pubdate' orderway='desc'}
<li>
<a href="[field:arcurl/]">[field:title/]</a>
<span>[field:pubdate function="strftime('%Y-%m-%d', @me)"/]</span>
</li>
{/dede:arclist}
这个例子中,orderby='pubdate' orderway='desc' 是默认行为,所以可以省略,但写上能让代码意图更清晰。
| 需求 | 代码写法 |
|---|---|
| 调用默认完整时间 | [field:pubdate/] |
| 格式化为 Y-m-d | [field:pubdate function="strftime('%Y-%m-%d', @me)"/] |
| 格式化为 Y年m月d日 | [field:pubdate function="strftime('%Y年%m月%d日', @me)"/] |
| 格式化为 X天前(需自定义函数) | [field:pubdate function="formatTime(@me)"/] |
| 按录入时间排序 | {dede:arclist ... orderby='senddate' ...} |
掌握 field:pubdate 和 strftime 的组合使用,就能满足你在织梦模板中99%的时间显示需求。
