Blade调用diffInDaysFromToday()报未定义函数错误如何排查
问题根本原因
这个报错和日期格式没有任何关系,触发报错的核心原因是:PHP和Laravel框架没有提供全局可直接调用的diffInDaysFromToday()函数,你在模板里直接裸调用一个未被定义的函数,就会抛出「Call to undefined function」错误。
实际上你想调用的日期差计算方法,是Laravel内置的Carbon日期操作类的实例方法,不属于全局可调用的函数,必须在Carbon实例上调用,不能直接写函数名调用。
修复方式
- 先将
$course['createdAt']字段值解析为Carbon实例,再调用实例上的日期差方法即可,修正后的Blade代码如下:
@if($course['createdAt'] != null) @if( \Carbon\Carbon::parse($course['createdAt'])->diffInDays(now()) < 30 ) <span>{{__('new')}}</span> @endif @endif
- 如果
$course是Eloquent模型查询出的结果,建议提前在对应模型的$casts配置中,将createdAt字段声明为日期类型,字段值会自动转为Carbon实例,后续模板里可以直接写$course->createdAt->diffInDays(now())调用,无需每次手动解析。 - 如果你确实需要全局使用
diffInDaysFromToday()函数,需要自行在项目的自定义辅助函数文件中定义该函数,未定义的情况下直接调用必然触发报错。
补充说明:如果是日期格式不合法导致的异常,报错信息会指向Carbon日期解析失败,和「调用未定义函数」的报错类型完全不同,可以直接排除日期格式诱因。
内容的提问来源于stack exchange,提问作者wertyu
相关产品推荐
相关产品推荐

