是否存在显示相对时间格式的过滤器?类似Laravel的diffForHumans()
实现类似Laravel
diffForHumans()的时间格式化过滤器 嘿,这个需求真的很普遍!虽然不清楚你具体在用什么技术栈,但我可以给你几个通用的思路和实现方向,帮你搞定这种“相对时间+具体日期”的格式化需求:
前端实现(JavaScript)
如果是在前端处理,推荐用Day.js或者Moment.js(Day.js更轻量),它们都自带相对时间格式化的能力,还能轻松切换到具体日期格式:
// 以Day.js为例,先引入依赖和插件 import dayjs from 'dayjs'; import relativeTime from 'dayjs/plugin/relativeTime'; dayjs.extend(relativeTime); // 格式化相对时间 console.log(dayjs('2024-05-20 14:30').fromNow()); // 比如"1小时前" // 根据时间跨度自动切换格式 const targetDate = dayjs('2018-01-01'); const daysDiff = dayjs().diff(targetDate, 'day'); if (daysDiff > 7) { console.log(targetDate.format('DD-MM-YYYY')); // 输出"01-01-2018" } else if (daysDiff === 0) { console.log('今天'); } else if (daysDiff === 1) { console.log('昨天'); } else { console.log(targetDate.fromNow()); }
后端实现(PHP)
如果是后端处理,不管是不是Laravel,Carbon库都是绝佳选择——毕竟Laravel的diffForHumans()就是基于Carbon做的:
use Carbon\Carbon; $date = Carbon::parse('2018-01-01'); // 直接输出相对时间 echo $date->diffForHumans(); // 比如"6年前" // 自定义逻辑切换格式 $now = Carbon::now(); if ($now->diffInDays($date) > 7) { echo $date->format('d-m-Y'); // "01-01-2018" } elseif ($now->isSameDay($date)) { echo '今天'; } elseif ($now->subDay()->isSameDay($date)) { echo '昨天'; } else { echo $date->diffForHumans(); }
其他技术栈参考
- Python:可以用
arrow库,它的arrow.humanize()方法能直接生成相对时间,配合格式判断就能实现需求。 - Java:用
java.timeAPI结合自定义逻辑,或者使用Joda-Time库简化开发。
如果能告诉我你具体用的技术栈,我还能给你更精准的代码示例哦!
内容的提问来源于stack exchange,提问作者xamarinDev
相关产品推荐
相关产品推荐

