2

所以,我有这个 Web 服务器可以解析具有特定“时间段”的 XML 文件。

时间段如下所示(我无法更改):

00:05:00 00:09:15 01:13:15以一种HH:MM:SS格式。

我想对_.filter()日期在 和 之间的所有对象进行选择00:00:0000:10:00然后对所有对象在00:10:00和之间进行过滤00:20:00

编辑(澄清):时间段是“观看时间”。假设时间段有 50 个条目,范围从 00:00:00 到 1:30:00,但我想创建一个新列表,其中包含

  • 时间段
  • 该时间段内的平均“观看次数”。

这意味着我需要某种方式说:'选择 0 分钟到 10 分钟之间的所有时间段。给我一个清单。计算平均值'。

为此,我需要有一些可能进行算术运算,看到我想

  • 比较日期
  • 每次迭代增加 10 分钟

但是,JavascriptDate对象似乎不能很好地处理“只是时间”,moment.js库也没有。我该怎么做?

4

2 回答 2

0

这是我在 JS 中的做法:

times=['00:05:00', '00:09:15', '01:13:15'];
  1. 先得秒

    function getsec(time){
      arr=time.split(':');
      return (+arr[0])*3600 + (+arr[1])*60 + (+arr[2]);
    }
    
    times.map(getsec)
    [ 300, 555, 4395 ]
    
  2. 然后将时间过滤到特定时间段的插槽中

    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 ] ]
    

    返回数组数组。每个子数组在槽内按升序包含时间

  3. 计算平均值

    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 ]
    

    由于我们正在处理数组数组,因此我们需要一个包装器。

最后我想说,如果你有很多条目,数据库会更快。

于 2013-08-27T04:33:22.707 回答
-1

Simplest way would be for you to convert everything into seconds, and then do your thing.

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;
}
于 2013-08-25T14:20:50.653 回答