js获取离当前时间点最近的时间

假如后台返回的arr=[0812,0819,0829,0929];
数组的每一项代表一个日期。
今天是0831,怎么判断得出距离今天最近的一天是数组的哪一项?下标怎么获取出来?
这里指的最近的一天是指距离当天时间绝对的天数,比如说有两个数据分别是0829,0901,那离今天(0831)最近的就是0901了。
哈哈,觉得自己好啰嗦,毕竟还是想把需求说清楚。
希望各位大佬解答一下!!!
不胜感激!!!

补充一下,后台返回的数据长这个样子:
图片描述

阅读 9.8k
5 个回答
   var timeArr = ['2017-07-10T07:00:00.00Z', '2017-08-15T07:00:00.00Z', '2017-07-12T07:00:00.00Z', '2017-07-15T07:00:00.00Z',
       '2017-07-15T07:00:00.00Z', '2017-09-02T07:00:00.00Z'
   ];
   var timestamp = Date.now();
   var min;
   var index = 0;
   timeArr.forEach(function(item, i) {
       var itemStamp = new Date(item).getTime();
       var interVal = Math.abs(timestamp - itemStamp);
       if (min == void 0) { min = interVal } else {
           if (min > interVal) {
               min = interVal;
               index = i;
           }
       }
   })
   console.log(index);

直接转换成时间戳也就是从1970年到这个时间的毫秒数。然后一个求最大值就可以了

那就用数组的每一个减去它自己,取绝对值比较,返回最小的,PS:排除本身

var arr=[0812,0819,0829,0929]
    var today = 0831
    var oldnum, num, index, i
    for(i in arr){
      oldnum = num
      num = Math.abs(arr[i] - today);
      if(num < oldnum) index = i
    }
    alert(index)

由于月份和日期的特殊性,你应该用new Date来判断远近,你后台返回的字符串可以直接构造成Date对象

arr.reduce((r,date)=>{
    var s = new Date().setHours(0)-new Date(date)
    if(s<0) s = -s
    if(!(s>r[0])) r =[s,date]
    return r
},[])[1]
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题