2010-09-14 161 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文件 - 如果是的話,它會從程序停止的地方繼續進行(問題尚未得到解答以及剩餘時間的長短),否則程序會重新開始。

爲了使考試成爲獨立的,因此獨立於任何服務器,所有的問題和選項都被導出到資源文件中,然後該資源文件被包含在考試本身的版本中。