js对于数据进行时间排序的问题

最近遇到一个需求,要监控离指定utc时间最近的数据。

首先数据是存在历史性的,如:

2018-7-11 10:32:26

2018-7-11 10:34:30

2018-7-11 10:34:42

那么如何获取离2018-7-11 10:32:33

最近的数据呢?

这里可以考虑使用差值计算,既时间在js中是按当前时间到1970年1月1日午夜的毫秒数进行计算的所以可以采用获取这些时间和指定时间的差值,然后计算绝对值后进行排序。

代码如下:

currentdate = new Date();// 指定目标时间为当前时间

nowdate=currentdate.getTime()+currentdate.getTimezoneOffset()*60000; // 我这里使用utc时间进行计算,请不要使用任何的utc转换计算方式,因为js会自动转为当前时间

排序算法:

// 计算两个时间的差值找到离当前时间最近的时间
    var comparedate = function (obj1, obj2) {
        var val1 = new Date(obj1.Time);  // 2018-7-11 10:50:29
        var val2 = new Date(obj2.Time);
        var dc1 = Math.abs((parseInt(nowdate - val1)/1000));
        var dc2 = Math.abs((parseInt(nowdate - val2)/1000));
        if (dc1 < dc2) {
            return -1;
        } else if (dc1 > dc2) {
            return 1;
        } else {
            return 0;
        }
    }

使用时:

var arraydate = new Array();
arraydate.sort(comparedate);

这里需要注意的是如何获取utc时间,首先说明不能使用以下方式获取:

 
    
var nowdate = new Date();
var nowdate = Date.UTC(currentdate.getUTCFullYear(),currentdate.getUTCMonth(),currentdate.getUTCDate(),currentdate.getUTCHours(),
        currentdate.getUTCMinutes(),currentdate.getUTCSeconds());



这种方式获取的时间并不是utc时间,同理如果直接使用

var nowdate = new Date();
nowdate = Date.UTC(currentdate.getFullYear(),currentdate.getMonth(),currentdate.getDate(),currentdate.getHours(),
        currentdate.getMinutes(),currentdate.getSeconds());

只能使用获取当前时间和时区进行计算后获取时间结果

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值