layui 官方 util 模块从未提供 timeago 方法,仅支持 todatestring、formatdate(部分版本)和 countdown;“x分钟前”需自行实现或引入 dayjs 等轻量库,注意时间戳必须为13位毫秒级。
util.timeago 不存在,别再搜了——layui 官方 util 模块压根没这个方法。
为什么 util.timeago 总是报 TypeError: util.timeago is not a function
因为它是假的。Layui 2.x 的 util 模块只提供 util.toDateString、util.formatDate(部分版本)、util.countdown 这类基础工具,不包含相对时间计算逻辑。“3分钟前”“昨天”这类表达需自行实现或引入第三方。
- 常见错误:抄网上代码直接写
util.timeago(timestamp),结果运行就崩 - 魔改版风险:某些打包了
moment.js或自定义timeago的私有 Layui 构建,升级后必挂 - 官方文档里查不到
timeago——它从未被 layui 官方收录过
用 util.toDateString + 手动计算实现「X分钟前」
核心是:拿到毫秒级时间戳 → 算差值 → 分段返回中文描述 → 超过阈值时 fallback 到 util.toDateString。
- 传入的时间戳必须是 13 位毫秒级(如
1712345678000),若后端给的是 10 位秒级(如1712345678),得先* 1000 -
util.toDateString仅作兜底:比如超过 30 天,就退化为'yyyy-MM-dd'格式字符串 - 注意时区:该函数默认用本地时区解析,若后端时间是 UTC,显示会偏移(比如东八区+8小时)
function timeAgo(timestamp) {
const now = Date.now();
const diff = now - timestamp;
const sec = Math.floor(diff / 1000);
const min = Math.floor(sec / 60);
const hour = Math.floor(min / 60);
const day = Math.floor(hour / 24);
<p>if (sec </p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/code/7535" title="深蓝色网站后台管理系统layui框架模板-AdminPro"><img
src="https://img.php.cn/upload/webcode/000/287/557/6340dac18f876183.png" alt="深蓝色网站后台管理系统layui框架模板-AdminPro" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/code/7535" title="深蓝色网站后台管理系统layui框架模板-AdminPro" class="overflowclass">深蓝色网站后台管理系统layui框架模板-AdminPro</a>
<p class="overflowclass">一款深蓝色网站后台管理系统layui框架模板</p>
</div>
<a rel="nofollow" href="/xiazai/code/7535" title="深蓝色网站后台管理系统layui框架模板-AdminPro" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div><h3>
<code>util.countdown</code> 是唯一官方支持的倒计时工具,但不是「距现在多久前」</h3><p><code>util.countdown</code> 专用于正向倒计时(如“距离活动结束还剩 2 天 3 小时”),参数是 <code>endTime</code> 和 <code>serverTime</code>,每秒回调一次。它不能反向算“这条消息发于 5 分钟前”。</p>
- 误用场景:拿它去算历史时间差,结果得到负数或 NaN
- 正确用法:只用于未来时间点,且必须传入服务器时间戳(避免客户端时间不准)
- 返回的
date是数组:[天, 时, 分, 秒],不是对象,别解构错
真正省心的做法:轻量替代方案
如果项目允许引入额外依赖,比手写更稳:
-
dayjs+dayjs/plugin/relativeTime:3KB,无副作用,支持多语言,dayjs('2026-06-30').fromNow() - 纯函数封装:把上面
timeAgo封装成独立模块,避免污染layui.util命名空间 - 服务端直接计算:让后端返回格式化好的相对时间字符串(如
"2小时前"),前端只做展示
最易被忽略的点:时间戳单位。10 位 vs 13 位混用是高频 bug 来源,建议统一在接口层处理,前端只接收毫秒级。










