如何利用moment处理时间戳并计算时间的差值

 更新时间:2022年04月25日 10:47:13   作者:huihu_bird  
前端很多场景都会涉及到对时间的处理,我所用得最多的库是moment,下面这篇文章主要给大家介绍了关于如何利用moment处理时间戳并计算时间的差值的相关资料,需要的朋友可以参考下

项目使用nodejs写服务端,有个功能就是统计代理服务器流量,然后把统计的数据通过echarts渲染到页面。

当然统计数据这里用到了 定时器,在使用的是

 var 
 schedule = 
 require(
 'node-schedule');

有兴趣的同学可以在npm上搜一搜关于js定时任务的事,其实都大同小异,差不多都是运用corn表达式。

以下是我的 定时从代理服务器获取数据 并存库。

schedule.scheduleJob('*/15 * * * * * ', function () {
            console.log('timer !!!!!!!!!!');
            var dataObj1 = {};
            iplists.forEach(function (ele, index) {
                var req = http.request("http://" + ele + ":14567/stat", function (res) {
                    dataObj1.time = new Date(res.headers.date);
                    dataObj1.ip = req.getHeader("host").split(":")[0];
                    res.setEncoding('utf-8');
                    var tempData = '';
                    res.on('data', function (chunk) {
                        tempData += chunk;
                        var resultObj = JSON.parse(tempData);
                        dataObj1.flow = resultObj.bw15s;
                        var flow1 = new flowrank1({
                            ip: dataObj1.ip,
                            flow: dataObj1.flow,
                            time: new Date(dataObj1.time)
                        });
                        flow1.save(function (err, flow1) {
                            if (err) {
                                console.log(err);
                                return;
                            }
                        });
                    });
                });
                req.on("error", function (err) {
                    console.log(err);
                });
                req.end()
            });
        });

现在来展示 需要根据前端传过来的 时间戳 来筛选出数据的代码,处理时间我用到了moment这个类库,基本包含了时间所有的处理方法。

总结以下moment的几个常用的函数:

moment().startOf('year');    // set to January 1st, 12:00 am this year
moment().startOf('month');   // set to the first of this month, 12:00 am
moment().startOf('quarter');  // set to the beginning of the current quarter, 1st day of months, 12:00 am
moment().startOf('week');    // set to the first day of this week, 12:00 am
moment().startOf('isoWeek'); // set to the first day of this week according to ISO 8601, 12:00 am
moment().startOf('day');     // set to 12:00 am today
moment().startOf('date');     // set to 12:00 am today
moment().startOf('hour');    // set to now, but with 0 mins, 0 secs, and 0 ms
moment().startOf('minute');  // set to now, but with 0 seconds and 0 milliseconds
moment().startOf('second');  // same as moment().milliseconds(0);
moment().diff(Moment|String|Number|Date|Array);
moment().diff(Moment|String|Number|Date|Array, String);
moment().diff(Moment|String|Number|Date|Array, String, Boolean);
var a = moment([2008, 9]);
var b = moment([2007, 0]);
a.diff(b, 'years');       // 1
a.diff(b, 'years', true); // 1.75
moment().add(Number, String);
moment().add(Duration);
moment().add(Object);
var moment = require('moment');
var starttime = moment(moment.unix(parseInt(req.query.starttime)).toDate());
console.log("==============");
console.log(moment(moment.unix(parseInt(req.query.starttime)).toDate()));
var endtime = moment(moment.unix(parseInt(req.query.endtime)).toDate());
console.log(moment(moment.unix(parseInt(req.query.endtime)).toDate()));
console.log(endtime.diff(starttime, 'hour'));
console.log(endtime.diff(starttime, 'months'));
console.log(endtime.diff(starttime, 'months'));
/**
  * 查询小于1天的数据
  */
if (endtime.diff(starttime, 'hour') <= 24) {
    console.log("flowrank1");
    flowrank1.find({
        ip: req.query.ip,
        time: {
            $gt: moment.unix(req.query.starttime).toDate(),
            $lte: moment.unix(req.query.endtime).toDate()
        }
    },
    {
        _id: 0,
        ip: 1,
        flow: 1,
        time: 1
    },
    function(err, doc) {
        if (err) {
            console.log("err!!!!!")
            console.log(err);
            return res.end(JSON.stringify(retcode.operateDbErr));
        }
        var result = retcode.res_ok;
        result.data = doc;
        console.log(doc)
        res.end(JSON.stringify(result));
    })
} else if (endtime.diff(starttime, 'months') == 0) {
    console.log("flowrank2!!!!");
    flowrank2.find({
        ip: req.query.ip,
        time: {
            $gt: moment.unix(req.query.starttime).toDate(),
            $lte: moment.unix(req.query.endtime).toDate()
        }
    },
    {
        _id: 0,
        ip: 1,
        flow: 1,
        time: 1
    },
    function(err, doc) {
        if (err) {
            console.log("err!!!!!")
            console.log(err);
            return res.end(JSON.stringify(retcode.operateDbErr));
        }
        var result = retcode.res_ok;
        result.data = doc;
        console.log(doc)
        res.end(JSON.stringify(result));
    })
} else if (endtime.diff(starttime, 'months') >= 1) {
    console.log("in flowrank3");
    flowrank3.find({
        ip: req.query.ip,
        time: {
            $gt: moment.unix(req.query.starttime).toDate(),
            $lte: moment.unix(req.query.endtime).toDate()
        }
    },
    {
        _id: 0,
        ip: 1,
        flow: 1,
        time: 1
    },
    function(err, doc) {
        if (err) {
            console.log("err!!!!!")
            console.log(err);
            return res.end(JSON.stringify(retcode.operateDbErr));
        }
        var result = retcode.res_ok;
        result.data = doc;
        console.log(doc)
        res.end(JSON.stringify(result));
    })
} else {
    return res.end(JSON.stringify(retcode.res_err));
}

总结

到此这篇关于如何利用moment处理时间戳并计算时间差值的文章就介绍到这了,更多相关moment处理时间戳时间差内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • javascript 极速 隐藏/显示万行表格列只需 60毫秒

    javascript 极速 隐藏/显示万行表格列只需 60毫秒

    隐藏表格列 这种方式的效率极低。例如,隐藏一个千行表格的某列,在我的笔记本(P4 M 1.4G,768M内存)上执行需要约 4000毫秒的时间,令人无法忍受。
    2009-03-03
  • js实现的页面矩阵图形变换特效

    js实现的页面矩阵图形变换特效

    这篇文章主要介绍了js实现的页面矩阵图形变换特效,涉及JavaScript利用数组与字符串的数学运算操作页面节点样式变换的相关技巧,需要的朋友可以参考下
    2016-01-01
  • JS中用EL表达式获取上下文参数值的方法

    JS中用EL表达式获取上下文参数值的方法

    下面小编就为大家分享一篇JS中用EL表达式获取上下文参数值的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • JS中for,for...in,for...of和forEach的区别和用法实例

    JS中for,for...in,for...of和forEach的区别和用法实例

    JS遍历数组(循环数组)的方式有多种,可以使用传统的for循环,也可以使用升级版的for in循环,还可以使用Array类型的forEach() 方法,这篇文章主要给大家介绍了关于JS中for、for...in、for...of和forEach的区别和用法的相关资料,需要的朋友可以参考下
    2021-11-11
  • DatePickerDialog 自定义样式及使用全解

    DatePickerDialog 自定义样式及使用全解

    这篇文章主要介绍了DatePickerDialog 自定义样式及使用全解,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • 动态加载js文件简单示例

    动态加载js文件简单示例

    这篇文章主要介绍了动态加载js文件的方法,结合实例形式简单分析了JavaScript动态加载的实现技巧,需要的朋友可以参考下
    2016-04-04
  • 如何通过JS实现日历简单算法

    如何通过JS实现日历简单算法

    这篇文章主要介绍了如何通过JS实现日历简单算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 微信小程序实现联动选择器

    微信小程序实现联动选择器

    这篇文章主要为大家详细介绍了微信小程序实现联动选择器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-02-02
  • js实现简易计数器功能

    js实现简易计数器功能

    这篇文章主要为大家详细介绍了js实现计数器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • js判断某个方法是否存在实例代码

    js判断某个方法是否存在实例代码

    这篇文章主要介绍了js判断某个方法是否存在的实例代码,可用于检测js中的方法是否可用,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-01-01

最新评论