按秒分组以获取时间戳数组

时间:2018-08-31 13:03:50

标签: javascript arrays

我的日志数据中有一个timestamps数组。我正在尝试按seconds对这些时间戳进行分组,以便可以 图表中每1秒显示一次isplay。

[
   "2018-08-31T12:52:44.357174404+00:00",
   "2018-08-31T12:52:44.357133365+00:00",
   "2018-08-31T12:52:44.357185085+00:00", 
   "2018-08-31T12:52:44.357192810+00:00",
   "2018-08-31T12:52:40.197139820+00:00",
   "2018-08-31T12:52:40.197829400+00:00",
   ............
   ...........
   .........
   "2018-08-31T12:49:21.658622784+00:00",
   "2018-08-31T12:49:07.121419856+00:00"
]

请让我知道用second进行分组并每秒钟显示日志数的最佳方法。

感谢您的帮助。

谢谢

4 个答案:

答案 0 :(得分:1)

尝试这种方式

var logArr = [
"2018-08-31T12:52:44.357174404+00:00",
"2018-08-31T12:52:44.357133365+00:00",
"2018-08-31T12:52:44.357185085+00:00", 
"2018-08-31T12:52:44.357192810+00:00",
"2018-08-31T12:52:40.197139820+00:00",
"2018-08-31T12:52:40.197829400+00:00"
]
var secondNumData = {}

logArr.forEach(item => {
    var itemSecond = item.slice(0, 19)
    if (secondNumData[itemSecond] == null) {
        secondNumData[itemSecond] = 0
    }
    secondNumData[itemSecond]++
})

console.log(secondNumData)

答案 1 :(得分:1)

好吧,我认为您可以采用上面介绍的方法,

  1. timestamps中循环,为每个日期创建一个日期,并获得第二个日期。

  2. 检查此秒是否存在于新的timeStamps数组中(将以秒为单位)

  3. 如果找不到第二个对象,则会创建一个具有以下结构的新对象: {Second: int, Times: []},其中Second是“ id”,Times是包含该秒所有时间戳的数组。

  4. 如果在新数组中找到第二个,则只需将时间戳推送到对象。

然后,当您需要使用时间戳记时,可以在arrOfSeconds中运行循环并获取arrOfSeconds[i].Times

let ts = [
   "2018-08-31T12:52:44.357174404+00:00",
   "2018-08-31T12:52:44.357133365+00:00",
   "2018-08-31T12:52:44.357185085+00:00", 
   "2018-08-31T12:52:44.357192810+00:00",
   "2018-08-31T12:52:40.197139820+00:00",
   "2018-08-31T12:52:40.197829400+00:00",
   "2018-08-31T12:49:21.658622784+00:00",
   "2018-08-31T12:49:07.121419856+00:00"
]
let arrOfSeconds = [];

for (var time of ts){
  let second = new Date(time).getSeconds();
  let index = arrOfSeconds.findIndex(a => a.Second == second);  
  
  if (index == -1){
    let obj= {}
    obj.Second = second;
    obj.Times = [];
    obj.Times.push(time);
    arrOfSeconds.push(obj);
  }else{  
    arrOfSeconds[index].Times.push(time)
  }
}

console.log(arrOfSeconds);

答案 2 :(得分:1)

或者,您可以使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="tests"> </div>构建直方图输出:

Array.prototype.reduce

答案 3 :(得分:0)

您可能需要比较UTC格式的日期,然后将其添加到唯一的数组中。您可以按照以下方式进行操作。

function groupBySeconds(array)
    {   
        let bySeconds = [];
        array.forEach(date => {
           d = new Date(date);
           d = Math.floor(d.getTime()/(1000));
           bySeconds[d]= byday[d] || [];
           bySeconds[d].push(date);

        }
        return bySeconds;
     }