正在分析Javascript中的时间字符串

Parsing time-strings in Javascript

本文关键字:时间 字符串 Javascript      更新时间:2023-09-26

因此,我有一个web服务器,它可以解析具有特定"时间段"的XML文件。

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

00:05:0000:09:15CCD_ 3以CCD_。

我想对日期介于00:00:0000:10:00之间的所有对象进行_.filter()选择,然后对所有对象介于00:10:0000:20:00之间的对象进行筛选。

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

  • 时间段
  • 该时间段内的平均"观看次数"

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

为此,我需要有一些可能性来做算术运算,因为我想

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

然而,Javascript Date对象似乎不能很好地处理"只是时间",moment.js库也不能。我该怎么做?

以下是我在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 ]
    

    由于我们处理的是数组数组,所以我们需要一个包装器。

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

最简单的方法是将所有内容转换为秒,然后完成自己的任务。

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;
}