2010-09-14 150 views
0

我们有基于用户参加测试的倒计时的要求。处理跟踪用户在测试过程中花费的时间的最佳方法是什么?如何计算倒计数场景中的剩余时间

我们捕捉开始时间,结束时间。但是如果应用程序服务器或操作系统在测试过程中出现故障,则计算会出错。我们正在考虑在用户提交问题答案后使用另一个变量来存储当前时间。所以(结束时间 - 当前时间)将合理地解释剩余的时间量。

有没有一种有效的方法来计算上述以外的情况下的“剩余时间”?

我们希望的解决方案是数据库无关尽可能

+0

究竟是什么比简单的减法更容易? – halfdan 2010-09-14 11:34:28

+0

我的问题是,目前我的表中没有当前时间字段。我正在检查是否有更有效的方法来处理系统停机时间和重新计算剩余时间。 – Sam 2010-09-14 11:44:22

+0

你正在使用哪些DBMS? – 2010-09-14 14:19:36

回答

3

具体而言,我会继续与MYSQL。

正如你所说,你已经捕捉到了开始时间。当用户加载测试时,将此时间戳记写入DATETIME字段。另一种选择是使用UNIX_STAMP。然后,当用户提交答案时,您可以轻松将此数据放到另一个DATETIME字段。

除了其他rdbms系统,mysql还有日期 - 时间操作函数。

SELECT CURRENT_TIMESTAMP();查询返回当前时间戳。例如。 '2007-12-15 23:50:26'

SELECT UNIX_TIMESTAMP();查询返回可能很容易计算差异的当前unix时间戳。例如。 1111885200

此外,我们还得到了用于加法,减法操作的DATE_SUB()和DATE_ADD()函数。

详情请登录date-time manual页面。我想这些信息会导致你找到合适的解决方案。

- 增加了关于09月18:

您可以使用JavaScript来跟踪用户的行为。例如,一个函数调用服务器端脚本,使用盐或会话中的某个东西。该服务器端脚本将当前时间戳记录为“上次更新”。数据库部分与上面相同。

+0

其实你不需要“当前时间”字段。为了将来的检查,您需要两个需要字段:1-testStarted 2-testEnded。 只需在操作完成时设置这些字段的值。剩下的就是计算差异。这可以使用date_sub()轻松完成。 要弄清楚更有效的方法,请更清楚。例如,定义这个解决方案有什么问题。 干杯。 – enesismail 2010-09-14 15:24:29

+0

如果我只有2个日期,并且操作系统崩溃,则重新启动应用程序服务器。我不知道从哪里重新启动柜台,这是我目前面临的问题(也许用户是20分钟测试10分钟或20分钟测试5分钟) – Sam 2010-09-15 01:54:17

+0

我明白了。我会添加我的建议。 – enesismail 2010-09-18 15:06:08

0

我已经使用倒数计时器编写了这样一组考试。不幸的是,有时在计算机实验室中经常发生停电,我不得不添加代码来处理这个问题。基本上,考试程序每隔30秒将其状态(答案和时间流逝)保存在.ini文件中。当考试程序启动时,它会检查是否存在这样一个ini文件 - 如果是的话,它会从程序停止的地方继续进行(问题尚未得到解答以及剩余时间的长短),否则程序会重新开始。

为了使考试成为独立的,因此独立于任何服务器,所有的问题和选项都被导出到资源文件中,然后该资源文件被包含在考试本身的版本中。