You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在显示相对时间格式的过滤器?类似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.time API结合自定义逻辑,或者使用Joda-Time库简化开发。

如果能告诉我你具体用的技术栈,我还能给你更精准的代码示例哦!

内容的提问来源于stack exchange,提问作者xamarinDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:47:37