如何在Blade模板中修改日期格式:转换YYYY-MM-DD为指定格式
解决方案:Laravel Blade中转换日期格式
看起来你是在Laravel项目里用Blade模板处理日期格式转换对吧?针对你要的两种格式,这里提供具体实现方法:
1. 转换为DD--MM--YEAR格式
如果你的$expenses->date是Eloquent模型的日期字段(默认会被转为Carbon实例),直接调用format()方法即可:
<td>{{ $expenses->date->format('d--m--Y') }}</td>
如果date字段没有被模型识别为日期类型(比如没在模型的$dates属性里添加,或者是字符串),需要先转成Carbon实例再格式化:
<td>{{ Carbon\Carbon::parse($expenses->date)->format('d--m--Y') }}</td>
2. 转换为英文序数格式(如5th May 2018)
这种格式需要处理日期的序数后缀(st/nd/rd/th),可以直接在Blade里写逻辑,或者封装成辅助函数更优雅:
方式一:直接在Blade中处理
<td> @php // 确保日期是Carbon实例 $date = $expenses->date instanceof Carbon\Carbon ? $expenses->date : Carbon\Carbon::parse($expenses->date); $day = $date->day; // 判断序数后缀 $suffix = match(true) { $day % 10 == 1 && $day != 11 => 'st', $day % 10 == 2 && $day != 12 => 'nd', $day % 10 == 3 && $day != 13 => 'rd', default => 'th', }; // 拼接最终格式 echo "{$day}{$suffix} {$date->format('F Y')}"; @endphp </td>
方式二:封装辅助函数(推荐,复用性更高)
- 在项目根目录的
app文件夹下创建Helpers.php文件,添加以下函数:
<?php use Carbon\Carbon; function formatDateWithOrdinal($date) { // 转换为Carbon实例 $carbonDate = is_a($date, Carbon::class) ? $date : Carbon::parse($date); $day = $carbonDate->day; // 确定序数后缀 $suffix = match(true) { $day % 10 == 1 && $day != 11 => 'st', $day % 10 == 2 && $day != 12 => 'nd', $day % 10 == 3 && $day != 13 => 'rd', default => 'th', }; return "{$day}{$suffix} {$carbonDate->format('F Y')}"; }
- 打开
composer.json,在autoload部分添加files配置:
"autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" }, "files": [ "app/Helpers.php" ] }
- 执行
composer dump-autoload命令加载辅助函数 - 之后在Blade里就可以直接调用:
<td>{{ formatDateWithOrdinal($expenses->date) }}</td>
注意事项
- 确保你的项目已经安装并启用了Carbon(Laravel默认自带,无需额外安装)
- 如果日期字段是字符串格式,
Carbon::parse()可以自动识别YYYY-MM-DD格式,无需额外处理
内容的提问来源于stack exchange,提问作者user9726704
相关产品推荐
相关产品推荐

