如何使用PHP date函数计算用户完成测验的耗费时长?
首先你当前的实现存在两个核心问题,无法直接计算耗时:
- 代码语法错误:
$date=date(Y-m-d);中日期格式字符串没有加引号,正确写法是$date = date('Y-m-d'); - 数据逻辑缺失:仅存储测验结束的
Y-m-d格式日期(仅精确到年月日,无时分秒),且缺少测验开始时间的记录,完全无法统计具体耗时。
以下是完整的可落地修正方案:
第一步:调整时间存储逻辑
- 你需要在用户进入测验开始答题的时刻就记录开始时间,同时结束时间要升级到精确到秒的格式,否则无法统计分钟/秒级的耗时:
- 开始时间存格式化时间字符串:
$start_time = date('Y-m-d H:i:s');,或者直接存Unix时间戳$start_time = time(); - 结束时间对应存格式化时间字符串:
$end_time = date('Y-m-d H:i:s');,或者对应Unix时间戳$end_time = time();
- 开始时间存格式化时间字符串:
- 数据库对应字段建议:如果存时间字符串用
datetime类型,存Unix时间戳用int(10)类型即可。
第二步:耗时计算实现
两种实现方式,对应不同的存储格式:
方式1:存储的是Unix时间戳
直接做减法得到耗时秒数后格式化即可:
// 示例为从数据库取出的开始、结束时间戳 $start_time = 1698720000; $end_time = 1698721850; // 计算耗时总秒数 $cost_seconds = $end_time - $start_time; // 格式化输出 时:分:秒 格式 $format_time = gmdate('H:i:s', $cost_seconds); // 以上示例输出为:00:30:50 代表耗时30分50秒
方式2:存储的是datetime格式字符串
用PHP内置的DateTime类处理更稳妥,可避免时间格式解析出错:
// 示例为从数据库取出的开始、结束时间字符串 $start_time = new DateTime('2023-10-31 10:00:00'); $end_time = new DateTime('2023-10-31 10:30:50'); $interval = $start_time->diff($end_time); // 按需输出不同格式 // 输出 30分50秒 echo $interval->i . '分' . $interval->s . '秒'; // 输出 00时30分50秒 echo $interval->h . '时' . $interval->i . '分' . $interval->s . '秒';
特殊场景适配
如果你的测验支持中途退出、下次继续作答,需要额外新增一张测验进度表,记录每一段答题的开始和结束时间,最后把所有时间段的耗时累加即可得到总耗时。
内容的提问来源于stack exchange,提问作者Rishabh Raj
相关产品推荐
相关产品推荐

