
在 Laravel Blade 模板中,可直接使用 PHP 原生函数(如 intdiv() 或 floor())将整型分钟数转换为「NhMmin」格式(如 25h10min),需注意类型安全与 PHP 版本兼容性。
在 laravel blade 模板中,可直接使用 php 原生函数(如 `intdiv()` 或 `floor()`)将整型分钟数转换为「nhmmin」格式(如 `25h10min`),需注意类型安全与 php 版本兼容性。
在 Laravel 开发中,常需将数据库或业务逻辑中存储的「总分钟数」(如视频时长、任务耗时)以更易读的方式展示给用户,例如将 1510 分钟显示为 25h10min,而非冗长的 1510min。这一转换无需额外依赖包,可在 Blade 模板中直接完成,但需兼顾可读性、健壮性与兼容性。
✅ 推荐方案:使用 intdiv()(PHP ≥ 7.0)
@php
$totalMinutes = (int) $duration; // 强制转为整数,避免字符串引发错误
$hours = intdiv($totalMinutes, 60);
$mins = $totalMinutes % 60;
@endphp
{{ $hours }}h{{ $mins }}min
intdiv() 是 PHP 7+ 提供的整数除法函数,语义清晰、性能稳定,且明确返回整型结果,避免浮点数隐式转换带来的潜在问题。
⚠️ 兼容方案:使用 floor()(支持 PHP 5.3+)
@php
$totalMinutes = (int) $duration;
$hours = floor($totalMinutes / 60);
$mins = $totalMinutes % 60;
@endphp
{{ $hours }}h{{ $mins }}min
若项目仍运行于 PHP 5.x 环境,floor($totalMinutes / 60) 是安全替代。注意:此处除法会产生浮点数,floor() 确保向下取整为整小时数。
? 关键注意事项
- 务必类型转换:若 $duration 来自请求参数或数据库字段(如字符串 '1510'),必须先 (int) $duration,否则 % 运算符可能触发类型警告或异常;
- 避免 Blade 内联过长表达式:不推荐在 {{ }} 中嵌套复杂计算(如 {{ floor((int)$d/60) }}h{{ (int)$d%60 }}min),既难维护又降低可读性;建议统一用 @php 块预处理变量;
- 增强可读性(进阶):可封装为 Blade 组件或自定义指令,例如 @duration($minutes),实现复用与逻辑解耦。
通过合理运用原生 PHP 函数并注重数据类型校验,即可在 Blade 中简洁、可靠地实现分钟到「小时+分钟」的格式化输出。











