问答

js如何判断两个时间最接近

作者:admin 2021-05-13 我要评论

我有两个json,一个是实时数据 jsonNow=[ {'value':'1.77','time':'2020-12-09 14:32:00','name':'A'}, {'value':'1.77','time':'2020-12-09 14:37:00','name':'B...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

我有两个json,一个是实时数据

jsonNow=[
        {'value':'1.77','time':'2020-12-09 14:32:00','name':'A'},
        {'value':'1.77','time':'2020-12-09 14:37:00','name':'B'}
  ]

一个是历史数据,数据比较多,我只截取其中一小部分,格式如下:

jsonHistory = 
[
              {'value':'1.78','time':'2020-12-08 14:31:00','name':'A'},
              {'value':'1.76','time':'2020-12-08 14:35:00','name':'A'},
              {'value':'1.79','time':'2020-12-08 14:36:00','name':'A'},
              {'value':'1.71','time':'2020-12-08 14:31:00','name':'B'},
              {'value':'1.66','time':'2020-12-08 14:35:00','name':'B'},
              {'value':'1.69','time':'2020-12-08 14:36:00','name':'B'}
  ]

现在我想根据jsonNow里的name,找到昨天时间最接近的一条数据,
就像现在,我想找到

[
   {'value':'1.78','time':'2020-12-08 14:31:00','name':'A'},
   {'value':'1.69','time':'2020-12-08 14:36:00','name':'B'}
 ]

我要怎么实现呢?

###

把时间转成时间戳,做减法,哪两个之间的绝对值最小,那他们必然是最接近的。

###
const result = [];
jsonNow.forEach(nowDate => {
  const nowTime = new Date(nowDate.time).getTime();
  let min = Number.MAX_SAFE_INTEGER;
  let minIndex = 0;
  jsonHistory.forEach((history, index) => {
    const historyTime = new Date(history.time).getTime();
    if (Math.abs(nowTime - historyTime) < min && nowDate.name === history.name) {
      min = Math.abs(nowTime - historyTime);
      minIndex = index;
    }
  });
  result.push(jsonHistory[minIndex]);
});

console.log(result);

但是有个问题是如果 history 有重复的值只能加一次

###

其实你这个是比较简单的,是数据的过滤比较,比较的参数实质有2个

  1. 是name相同
  2. 是time差最小

现在有了当前数据,直接可以提取name,然后分别对应比较time差
又因为time差是标准的时间格式数据(可以用new Date('时间格式数据')获得一个date对象),date对象有唯一的UTC值,这个值可以直接比较大小,也可以计算绝对差值,又因为明确了当前时间是比以往时间大的数,则用当前时间的UTC去减以往的UTC,找出差最小的一个即可。

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • js如何判断两个时间最接近

    js如何判断两个时间最接近

  • jmeter HTTP请求报405

    jmeter HTTP请求报405

  • 前后端分离的Rsa加解密如何实现呢?

    前后端分离的Rsa加解密如何实现呢?

  • 关于一个js的toString问题,toString(m

    关于一个js的toString问题,toString(m

腾讯云代理商
海外云服务器