将农场用户信息汇总页面中的"本阶段结束时间"从绝对时间显示改为相对时间描述(多久之后),并优化小数位数显示,提升用户体验和信息的直观性。
2025-05-24 15:30:00 改为 2小时后3.9725034797222小时后 改为 4小时后文件: app/Module/Game/AdminControllers/FarmUserSummaryController.php
新增 formatRelativeTime() 方法,用于将绝对时间转换为相对时间描述:
/**
* 格式化相对时间描述
*
* @param string|\Carbon\Carbon|null $dateTime 时间
* @return string 相对时间描述
*/
protected function formatRelativeTime($dateTime): string
{
if (!$dateTime) {
return '无';
}
try {
// 确保是Carbon实例
if (is_string($dateTime)) {
$dateTime = \Carbon\Carbon::parse($dateTime);
}
$now = now();
// 如果时间已经过去
if ($dateTime->isPast()) {
return '<span class="text-danger">已过期</span>';
}
// 计算时间差并返回合适的描述
$diffInSeconds = $now->diffInSeconds($dateTime);
$diffInMinutes = $now->diffInMinutes($dateTime);
$diffInHours = $now->diffInHours($dateTime);
$diffInDays = $now->diffInDays($dateTime);
if ($diffInSeconds < 60) {
return "<span class='text-warning'>{$diffInSeconds}秒后</span>";
} elseif ($diffInMinutes < 60) {
return "<span class='text-info'>{$diffInMinutes}分钟后</span>";
} elseif ($diffInHours < 24) {
return "<span class='text-primary'>{$diffInHours}小时后</span>";
} elseif ($diffInDays < 7) {
return "<span class='text-secondary'>{$diffInDays}天后</span>";
} else {
// 超过7天显示具体日期
return $dateTime->format('Y-m-d H:i:s');
}
} catch (\Throwable $e) {
return '<span class="text-muted">时间格式错误</span>';
}
}
将原来直接显示 $crop->stage_end_time 的地方改为使用相对时间格式:
// 修改前
$stageEndTime = $crop->stage_end_time;
// 修改后
$stageEndTime = $this->formatRelativeTime($crop->stage_end_time);
将表格列标题从"本阶段结束时间"更新为"本阶段结束时间(剩余)",更清楚地表示这是相对时间:
$headers = [
'ID', '位置', '土地类型', '状态', '种植作物', '种植时间', '生长阶段',
'本阶段开始时间', '本阶段结束时间(剩余)', '灾害情况'
];
round() 函数四舍五入到整数,避免显示小数// 秒级和分钟级:四舍五入到整数
$seconds = round($diffInSeconds);
$minutes = round($diffInMinutes);
// 小时级:智能小数处理
$hours = round($diffInHours, 1);
$hoursDisplay = $hours == intval($hours) ? intval($hours) : $hours;
// 天级:四舍五入到整数
$days = round($diffInDays);
| 原始值 | 优化前 | 优化后 | 说明 |
|---|---|---|---|
| 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小时后 |
四舍五入到1位小数 |
| 4.1小时 | 4.1小时后 |
4.1小时后 |
保留1位小数 |
2025-05-24 15:30:002小时后创建了单元测试 tests/Unit/FarmUserSummaryRelativeTimeTest.php 来验证:
| 原始时间差 | 优化前显示 | 优化后显示 | 颜色 |
|---|---|---|---|
| 30.7秒 | 30.7秒后 |
31秒后 |
黄色 |
| 5.3分钟 | 5.3分钟后 |
5分钟后 |
蓝色 |
| 2.0小时 | 2小时后 |
2小时后 |
主色调 |
| 2.5小时 | 2.5小时后 |
2.5小时后 |
主色调 |
| 3.97小时 | 3.9725034797222小时后 |
4小时后 |
主色调 |
| 4.1小时 | 4.1小时后 |
4.1小时后 |
主色调 |
| 3.2天 | 3.2天后 |
3天后 |
灰色 |
| 10天 | 10天后 |
2025-05-24 15:30:00 |
默认 |
| 已过期 | 已过期 |
已过期 |
红色 |
| 无数据 | 无 |
无 |
默认 |
app/Module/Game/AdminControllers/FarmUserSummaryController.phptests/Unit/FarmUserSummaryRelativeTimeTest.phpdocs/农场用户信息汇总页面相对时间显示优化说明.md