在农场用户信息汇总页面中,"本阶段结束时间(剩余)"显示的相对时间存在小数位数过多的问题,例如显示 3.9725034797222小时后,影响用户体验和可读性。
针对不同的时间单位采用不同的精度控制策略:
修改 FarmUserSummaryController.php 中的 formatRelativeTime() 方法:
// 根据时间差返回合适的描述
if ($diffInSeconds < 60) {
$seconds = round($diffInSeconds);
return "<span class='text-warning'>{$seconds}秒后</span>";
} elseif ($diffInMinutes < 60) {
$minutes = round($diffInMinutes);
return "<span class='text-info'>{$minutes}分钟后</span>";
} elseif ($diffInHours < 24) {
// 小时显示保留1位小数,但如果是整数则不显示小数
$hours = round($diffInHours, 1);
$hoursDisplay = $hours == intval($hours) ? intval($hours) : $hours;
return "<span class='text-primary'>{$hoursDisplay}小时后</span>";
} elseif ($diffInDays < 7) {
$days = round($diffInDays);
return "<span class='text-secondary'>{$days}天后</span>";
}
| 原始计算值 | 优化前显示 | 优化后显示 | 改进说明 |
|---|---|---|---|
| 30.7秒 | 30.7秒后 |
31秒后 |
四舍五入到整数,更简洁 |
| 5.3分钟 | 5.3分钟后 |
5分钟后 |
去除不必要的小数 |
| 2.0小时 | 2.0小时后 |
2小时后 |
整数不显示小数点 |
| 2.5小时 | 2.5小时后 |
2.5小时后 |
保留有意义的小数 |
| 3.97小时 | 3.9725034797222小时后 |
4小时后 |
大幅简化显示 |
| 4.1小时 | 4.1小时后 |
4.1小时后 |
保持合理精度 |
| 3.2天 | 3.2天后 |
3天后 |
简化天数显示 |
// 小时级:智能小数处理
$hours = round($diffInHours, 1);
$hoursDisplay = $hours == intval($hours) ? intval($hours) : $hours;
这个逻辑确保:
60秒后 → 自动进位到分钟级1分钟后 → 自动切换时间单位23.9小时后 → 保留小数1天后 → 自动切换到天级更新了 FarmUserSummaryRelativeTimeTest.php,新增了小数位数优化的测试用例:
public function testFormatRelativeTimeHoursDecimalOptimization()
{
// 测试3.5小时
$futureTime = Carbon::now()->addMinutes(210);
$result = $method->invoke($controller, $futureTime);
$this->assertStringContainsString('3.5小时后', $result);
// 测试整数小时不显示小数
$futureTime = Carbon::now()->addHours(5);
$result = $method->invoke($controller, $futureTime);
$this->assertStringContainsString('5小时后', $result);
}
通过测试脚本验证,优化后的显示效果符合预期:
30.7秒 -> 31秒后
5.3分钟 -> 5分钟后
2.0小时(整数) -> 2小时后
2.5小时 -> 2.5小时后
3.97小时 -> 4小时后
4.1小时 -> 4.1小时后
23.8小时 -> 23.8小时后
3.2天 -> 3天后
app/Module/Game/AdminControllers/FarmUserSummaryController.phptests/Unit/FarmUserSummaryRelativeTimeTest.phpdocs/农场用户信息汇总页面相对时间显示优化说明.mddocs/小数位数优化完成总结.md通过这次小数位数优化,我们成功解决了时间显示过于冗长的问题,提升了用户体验。优化后的显示既保持了必要的精度,又确保了良好的可读性,是一个平衡实用性和用户体验的成功案例。