Laravel 5.5中无法使用Carbon的diffForHumans方法?报语法解析错误
解决Laravel 5.5中Carbon diffForHumans语法错误问题
嘿,这个问题我之前碰到过,本质是Laravel版本降级后,Carbon的版本也跟着降到了不支持你之前写法的旧版本,具体来说:
问题根源
Laravel 5.6 配套的 Carbon 版本(1.x 后期或接近2.x的版本)支持直接给 diffForHumans() 传字符串日期作为对比基准,但 Laravel 5.5 绑定的是 Carbon 1.x 早期版本,这个版本的 diffForHumans() 方法不接受字符串作为第二个参数,它期望的是 Carbon 实例或者 null,直接传字符串就会触发语法/类型错误。
修复步骤
把你要对比的日期先转换成 Carbon 实例,再传入方法即可,修改后的代码如下:
use Carbon\Carbon; public function index(Request $request) { // 先把两个日期都解析成Carbon实例 $targetDate = Carbon::parse('2019-08-03'); $compareDate = Carbon::parse('2019-08-13'); // 传入Carbon实例调用diffForHumans dd($targetDate->diffForHumans($compareDate)); }
额外说明
如果你想确认当前项目的Carbon版本,可以查看项目根目录下的 composer.lock 文件,搜索 nesbot/carbon 就能看到具体版本号。Laravel 5.5 要求的Carbon版本是 ~1.22,这个版本的 diffForHumans() 参数签名是:
public function diffForHumans(Carbon $other = null, $absolute = false, $short = false, $parts = 1)
第一个参数必须是Carbon实例,第二个参数是布尔值(控制是否显示绝对时间而非相对),这和你之前在Laravel 5.6里用的写法完全不同,所以必须做这个调整。
内容的提问来源于stack exchange,提问作者test131
相关产品推荐
相关产品推荐

