You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用PHP date函数计算用户完成测验的耗费时长?

首先你当前的实现存在两个核心问题,无法直接计算耗时:

  1. 代码语法错误:$date=date(Y-m-d); 中日期格式字符串没有加引号,正确写法是$date = date('Y-m-d');
  2. 数据逻辑缺失:仅存储测验结束的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 19:06:00