我们要求根据用户参加考试倒计时。什么是解决用户在参加测试时所花时间的最佳方法。
我们捕捉开始时间,结束时间。但是,如果应用程序服务器或操作系统在测试期间出现故障,则计算结果会出错。在用户提交问题答案后,我们考虑使用另一个变量来存储当前时间。因此(结束时间 - 当前时间)将合理地计算剩余的时间。
除了上面提到的情况之外,是否有一种有效的方法来计算“剩余时间”?
我们希望解决方案尽可能与数据库无关
答案 0 :(得分: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页面了解详情。我想这些信息会引导您找到合适的解决方案。
- 9月18日补充:
您可以使用javascript来跟踪用户行为。例如,一个函数使用salt或会话中的内容调用服务器端脚本。该服务器端脚本将当前时间戳记录为“上次更新”。数据库部分与上面相同。
答案 1 :(得分:0)
我使用倒数计时器编写了这样一套考试。不幸的是,有时在计算机实验室经常停电,我不得不添加代码来处理这个问题。基本上,考试程序每30秒在.ini文件中保存其状态(答案和经过的时间)。当考试程序开始时,它会检查是否存在这样的ini文件 - 如果存在,它会从程序停止的地方继续进行(关于哪些问题尚未得到回答以及还有多长时间),否则程序将重新开始
为了使考试独立并因此独立于任何服务器,所有问题和选项都被导出到资源文件中,然后将其包含在考试版本中。