2016-03-02 61 views
1

我有一个用vanilla JS编写的测验程序。它应该记录完成它所需的时间。减去本地存储中设置的两个值之间的时间

我想达到的是需要多长时间用户通过减去两个变量(字符串)来回答问题。如果这甚至是可能的。

当用户已经声明了他的名字并按下一个按钮“开始测验”的currrent时间被记录在localStorage的像这样:

var storeName; 
var d = new Date(); 
var h = getHours(); 
var m = getMinutes(); 
var s = getSeconds(); 
var startTime = h + ":" + m + ":" + s; 
var endTime = h + ":" + m + ":" + s; 
var result; 

var storage = { 
    storeName: storeName, 
    startTime: startTime, 
    endTime: null, 
    result: result 
}; 

棘手的部分是,我不知道如何从结束时间减去开始时间以获得回答问题的时间。这个测验在几分钟内就结束了,所以使用这个小时是多余的。

当用户在最后一个问题上点击“提交”答案时,我想将记录在LS中的时间记录为endTime。

我希望我一直都不清楚,并且非常感谢您为您提供的所有时间。谢谢。

回答

0

您使用新的Date()错误。 应该是这个。

var d = new Date(); 
var h = d.getHours(); 
var m = d.getMinutes(); 
var s = d.getSeconds(); 
console.log(h); 

至于进一步的实施,你应该保存当前的时间,然后使用计时器点击/登录。之后,减去这两个值。例如秒。你只需通过例如3600分开(和/或采取一个模以实时分钟),以获得秒而不是一个小时。或者你可以使用所有的变量并减去时间。如果你遇到问题,例如你可以得到5 + 3 = 53而不是8,你可以使用Number(5)+ Number(3)来代替concat。祝你好运:P

编辑:也要从你的字符串中获得时间。通过拆分,您可以获得一系列价值。

var test = h + ":" + m + ":" + s; 
console.log(test.split(":")); 
+0

感谢这么快速的答复PVL。我会试试这个。谢谢。 – Robbo

1

不是将字符串存储为日期,而是直接存储以毫秒为单位的时间。然后,您可以用结束时间减去开始时间来计算时间差。

var startTime = Date.now(); 
var storage = { 
    storeName: storeName, 
    startTime: startTime, 
    endTime: null, 
    result: result 
}; 

稍后,您可以使用Date.now()计算的结束时间,并减去从开始时间得到的时间差。

storage.endTime = Date.now(); 

//difference 
var diff = storage.endTime - storage.startTime;