在Javascript中parsing时间string
所以,我有这个Web服务器,用一定的“时间段”parsing一个XML文件。
时间段显示如下(我不能改变这一点):
00:05:00
00:09:15
01:13:15
以HH:MM:SS
格式。
我想要在date介于00:00:00
和00:10:00
之间的所有对象上执行_.filter()
select,然后select介于00:10:00
和00:20:00
之间的所有对象的filter00:20:00
。
编辑(澄清):随着时间的“时间观看”。 假设有50个时间段的条目,从00:00:00到1:30:00不等,但是我想创build一个包含
- 时间段
- 在那段时间内,平均“观看次数”。
这意味着我需要某种方式来说:'select0分钟到10分钟之间的所有时间段。 给我一份清单。 计算平均值“。
为此,我需要有一些做算术运算的可能性,看我愿意
- 比较date
- 每次迭代添加10分钟
但是,Javascript Date
对象好像不能处理“just times”, moment.js
库也没有。 我将如何去这个?
这里是我将如何做JS:
times=['00:05:00', '00:09:15', '01:13:15'];
-
先得到秒
function getsec(time){ arr=time.split(':'); return (+arr[0])*3600 + (+arr[1])*60 + (+arr[2]); } times.map(getsec) [ 300, 555, 4395 ]
-
然后将时间过滤成特定时间段的时段
function filter(last, curr, index, array){ chk=parseInt(curr/600); //slots for 10 minutes if (typeof last[chk] === 'undefined') { last[chk]=[]; last[chk].push(curr); } else last[chk].push(curr); return(last) } times.map(getsec).reduce(filter,[]); [ [ 300, 555 ], , , , , , , [ 4395 ] ]
返回数组的数组。 每个子数组按时间顺序包含时隙内的时间
-
计算平均值
function avg(last, curr, index, array){ if(index==array.length-1) return (last+curr)/array.length; else return last+curr; } times.map(getsec).reduce(avg,0); 1750 function getavg(arr){ return arr.reduce(avg,0); } times.map(getsec).reduce(filter,[]).map(getavg); [ 427.5, , , , , , , 4395 ]
由于我们正在处理数组数组,我们需要一个包装器。
最后我会说,如果你有很多条目,数据库会更快。
最简单的方法是将所有东西都转换成秒,然后做你的事情。
inSeconds = function(time) { var secs, arr = []; arr = time.split(':').map(function(item) { return parseInt(item) }); secs = arr[0]*3600 + arr[1]*60 + arr[2]; return secs; }