0

我有一个包含一些问题的测验页面(多项选择,真假)。在提交页面后的结果中,我想显示如下内容:

Started on  Tuesday, 1 January 2013, 04:09 AM
Completed on    Tuesday, 1 January 2013, 04:10 AM
Time taken  47 secs
Grade   7 out of a maximum of 10 (65%)

我不知道如何计算开始时间和结束时间以显示上述结果,以及如何计算从用户加载页面到提交表单的时间。

我是新来的,我需要你的建议。如果问题用 php 或 javascript 或 jquery 解决,我没有问题

4

4 回答 4

2

您可以这样做,开始和结束时间戳将与表单一起提交。然后,您可以使用 PHP 进行计算。

var form = document.getElementById("form");

window.onload = function() {
    var start = document.createElement("input");
        start.type = "hidden";
        start.name = "start";
        start.value = +new Date()/1000; //unix timestamp

    form.appendChild(start);
};

form.onsubmit = function() {
    var stop = document.createElement("input");
        stop.type = "hidden";
        stop.name = "stop";
        stop.value = +new Date()/1000;

    form.appendChild(stop);
};
于 2013-01-01T19:17:51.603 回答
1

我会把开始的时间放在一个 cookie 或会话中,然后一旦他们完成它,只需从当前时间中减去那个时间——这就是所花费的时间!

它可能看起来像这样:

测验页面:

session_start();
$_SESSION['startTime'] = time();
// This is where the quiz would be displayed

测验结果页面:

session_start();
$totalTime = time() - $_SESSION['startTime'];
echo $totalTime;
于 2013-01-01T19:16:38.593 回答
1

好的,这是我的解决方案:

1-用户开始测验,你把时间放在 $_SESSION var

 $_SESSION['quiztime']=date("Y-m-d H:i:s");

2-用户完成测试并检查经过的时间(此示例以分钟为单位,如果需要秒,则不必将其除以 60)

 $to_time = strtotime(date("Y-m-d H:i:s"));
 $from_time = strtotime($_SESSION['quiztime']);
 echo round(abs($to_time - $from_time) / 60,2). " minutes";
于 2013-01-01T19:25:31.827 回答
1

我的“防弹”解决方案是将开始时间存储在服务器上,(在会话中)与执行表单生成的唯一 ID 相关联并保存在隐藏字段中。

这样您就可以防止用户篡改它(他可能会更改唯一 ID,但在这种情况下表单将无效)并且您不依赖于启用 javascript 的客户端。

<?php
$form_uuid = uniqid();
$_SESSION['quiz_start_time'][$form_uuid] = time();

然后,在您的表格中,输入如下内容:

<input type="hidden" name="form_id" value="<?php print $form_uuid; ?>">

并在表单提交处理程序中:

<?php
$form_uuid = $_POST['form_id'];
if (!isset($_SESSION['quiz_start_time'][$form_uuid])) {
    // The user is trying to do something nasty (or the session just expired)
    // Return something like a 400 error
}
else {
    $start_time = $_SESSION['quiz_start_time'][$form_uuid];
    // Do other form processing here..
}
于 2013-01-01T19:32:48.807 回答