使用 Javascript 的平均时间
Averaging Times using Javascript
我正在使用Phonegap和JQuery构建一个应用程序。
应用程序存储(使用window.localStorage)一组时间(不超过10)的格式。
HH:MM:SS.mm
列表中有许多"零"时间,例如"00:00:00.00",其中iphonegap,javascript消除使用..
function removeA(arr){
var what, a= arguments, L= a.length, ax;
while(L> 1 && arr.length){
what= a[--L];
while((ax= arr.indexOf(what))!= -1){
arr.splice(ax, 1);
}
}
return arr;
}
scores.sort();
removeA(scores,'00:00:00.00');
这样我就先剩下最快的时间,只有有价值的时间。
我需要从剩余的值中生成这些时间的平均值。
eg: 00:00:03.00
00:00:05.00
00:00:02.00
00:00:06.00
= 00:00:04.00
提前致谢:)
var times= [ '00:00:03.00', '00:00:05.00', '00:00:02.00', '00:00:06.00'],
date = 0,
result = '';
function offsetify(t){
return t < 10 ? '0' + t : t;
}
for(var x = 0; x < times.length; x++ ) {
var tarr = times[x].split(':');
date += new Date(0, 0, 0, tarr[0], tarr[1], tarr[2].split('.')[0], tarr[2].split('.')[1]).getTime();
}
var avg = new Date(date/times.length);
result = offsetify(avg.getHours()) + ':' + offsetify(avg.getMinutes()) + ':' + offsetify(avg.getSeconds()) + '.' + offsetify(avg.getMilliseconds());
演示
如果您还将具有毫秒值并且想要考虑它们,则将时间转换为毫秒。现在,将它们相加并除以记录数。否则,将所有内容转换为秒并找到平均值 - 当然,您会在几秒钟内得到答案。
如果花很少时间考虑,转换非常简单。以下是转换方法。
到毫秒:
function convertToMS(timeStr) { // timeStr in format 'HH:MM:SS.mm'
var I = parseInt; // for brevity
var t = timeStr,
h = I( t.substr(0,2) ),
m = I( t.substr(3,2) ),
s = I( t.substr(6,2) ),
ms = I( t.substr(9,2) );
return h * 3600000 + m * 60000 + s * 1000 + ms;
}
到秒:
function convertToS(timeStr) { // timeStr in format 'HH:MM:SS[.mm]' -- .mm is ignored.
var I = parseInt; // for brevity
var t = timeStr,
h = I( t.substr(0,2) ),
m = I( t.substr(3,2) ),
s = I( t.substr(6,2) );
return h * 3600 + m * 60 + s;
}
转换完成后,将它们相加并找到平均值。
更新:为了转换回"HH:MM:SS.mm"格式,我们将时间改回小时、分钟、秒和(如果适用)毫秒的"块"。
function chunkifyFromSec(time) { // time in s
var t = "",
h = Math.floor(time / 3600),
m = Math.floor( (t - (h * 3600)) / 60 ),
s = t - (h * 3600) - (m * 60);
return {
HH: h, MM: m, SS: s, mm: 0
};
}
function chunkifyFromMS(time) { // time in ms
var t = "",
h = Math.floor(time / 3600000),
m = Math.floor( (t - (h * 3600000)) / 60000 ),
s = Math.floor( (t - (h * 3600000) - (m * 60000)) / 1000 ),
mm = t - (h * 3600000) - (m * 600000) - (s * 1000);
return {
HH: h, MM: m, SS: s, mm: mm
};
}
然后,我们使用以下方法以"HH:MM:SS.mm"格式返回字符串:
function toTimeStr(chunks) {
return
(chunks.HH < 0 ? '0' : '') + chunks.HH + ":"
+= (chunks.MM < 0 ? '0' : '') + chunks.MM + ":"
+= (chunks.SS < 0 ? '0' : '') + chunks.SS + "."
+= (chunks.mm < 0 ? '0' : '') + chunks.mm
}
我对 Javascript 没有太多经验,所以我可能会有一些语法错误,但我认为你可以做一些类似的事情
var i = 0;
var totalTime = 0.0;
for (i=0; i < scores.length; i++) {
var hours = parseFloat(scores[i].substring(0, 2)); //get numeric value for hours
var minutes = parseFloat(scores[i].substring(3,5)); //get numeric value for minutes
var seconds = parseFloat(scores[i].substring(6)); //get numeric for the seconds
var time = ((hours * 60) + minutes) * 60 + seconds; //60 minutes in an hour, 60 seconds in a minute
totalTime += time;
}
var avgTime = totalTime/scores.length;
var avgHours = Math.floor(avgTime / 3600); //60*60
var avgHoursStr = String(avgHours);
var avgMinutes = Math.floor((avgTime % 3600) / 60); //mod to get rid of the hours
var avgMinutesStr = String(avgMinutes);
var avgSeconds = avgTime - avgHours*3600 - avgMinutes*60; //get the remainder. Can't use mod due to decimal
var avgSeconds = String(avgSeconds);
//Concat strings. Add the ":" spacers. Where necessary, add leading 0
var avgStr = (avgHoursStr.length > 1 ? "" : "0") + avgHoursStr + ":" + (avgMinutesStr.length > 1 ? "" : "0") + avgMinuteStr + ":" + avgSecondsStr;
[编辑 - 感谢Parth Thakkar指出我的问题]
要以毫秒或秒为单位返回答案:
var times = ["00:00:03.00", "00:00:05.00", "00:00:02.00", "00:00:06.00"];
function averageTimes(times,unit) {
if (!times) {
return false;
}
else {
var totalMilliseconds = 0, hours, minutes, seconds, milliseconds, parts;
for (var i = 0, len = times.length; i < len; i++) {
parts = times[i].split(':');
hours = parseInt(parts[0], 10) * 3600000;
minutes = parseInt(parts[1], 10) * 60000;
seconds = parseInt(parts[2].split('.')[0], 10) * 1000;
milliseconds = parseInt(parts[2].split('.')[1], 10);
totalMilliseconds += (hours + minutes + seconds + milliseconds);
}
if (!unit || unit.toLowerCase() == 'ms'){
return totalMilliseconds/times.length + ' milliseconds';
}
else if (unit.toLowerCase() == 's') {
return (totalMilliseconds/1000)/times.length + ' seconds';
}
}
}
// parameters:
// times: an array of times in your supplied format, 'HH:MM:SS:mm',
// unit: a string ('ms' or 's'), denoting whether to return milliseconds or seconds.
var average = averageTimes(times,'s');
console.log(average);
JS小提琴演示。
引用:
-
for(){/*...*/}
循环。 -
parseInt()
. -
split()
. -
toLowerCase()
.
相关文章:
- 如何将datetime转换为以毫秒为单位的epoch时间javascript
- 将日期时间javascript绑定到表列
- 将时间字符串值转换为时间javascript
- 将字符串转换为日期时间-javascript
- 日期和时间 JavaScript 的时间戳
- 从当前日期和时间 JavaScript 中减去 5 分钟
- 服务器时间而不是客户端时间 JAVASCRIPT
- 如何获取用户名,并将其与消息一起显示,具体取决于一天中的时间(Javascript)
- 将 UTC 转换为本地时间 Javascript
- 格式化日期时间JavaScript
- 如何将 UTC 时间转换为本地时间 JavaScript
- 天气json转换时间Javascript时间戳
- 转换时间戳在UTC到用户本地时间javascript
- 如何为测验设定时间(Javascript)
- 改变css样式取决于一天的时间(javascript)
- 将UNIX时间戳转换为日期时间(javascript)
- Date对象:创建时设置静态时间(Javascript)
- 为什么不是't我的网页显示时间(javaScript)
- if 语句 - 条件评估时间(Javascript)
- IE8 日期时间 JavaScript 差异