Laravel中使用Carbon如何在日期差中排除“weeks”显示
解决Laravel中Carbon排除周显示、不足1月以天数展示的问题
方法一:自定义Carbon全局宏(推荐)
给Carbon注册一个自定义宏,封装好逻辑后项目里随时能调用,很方便:
use Carbon\Carbon; // 把这段代码放在AppServiceProvider的boot方法里,就能全局生效 Carbon::macro('diffForHumansNoWeeks', function () { $diffDays = $this->diffInDays(Carbon::now()); // 不足30天直接返回天数格式,超过则用默认的diffForHumans逻辑 if ($diffDays < 30) { return $diffDays . ' ' . ($this->isFuture() ? '天后' : '天前'); } return $this->diffForHumans(); }); // 使用示例 $date = Carbon::now()->subDays(29); echo $date->diffForHumansNoWeeks(); // 输出 "29天前" $date = Carbon::now()->subDays(30); echo $date->diffForHumansNoWeeks(); // 输出 "1个月前"
方法二:临时判断差值输出
如果只是个别地方需要,直接写判断逻辑就行,不用全局注册:
use Carbon\Carbon; $date = Carbon::now()->subDays(29); $now = Carbon::now(); if ($date->diffInDays($now) < 30) { echo $date->diffInDays($now) . '天前'; } else { echo $date->diffForHumans(); }
注意事项
- 要是想和Carbon原生的“一个月”判断逻辑对齐(比如2月过28天就算1个月),可以把
diffInDays < 30换成$date->diffInMonths($now) === 0,这样更贴合Carbon的月份计算规则。 - 多语言环境下,可以用Laravel的翻译函数
__('days ago')替换硬编码的文字,适配不同语言。
内容的提问来源于stack exchange,提问作者Ahmed Shefeer
相关产品推荐
相关产品推荐

