热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

前端很多场景都会涉及到对时间的处理,我所用得最多的库是moment,下面这篇文章主要给大家介绍了关于如何利用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处理时间戳时间差内容请搜索编程笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程笔记!


推荐阅读
  • 在Laravel中实现PHP对JSON数据的发布与处理 ... [详细]
  • 在本文中,我们将探讨如何使用 UniApp 封装小程序 API 请求接口的最佳实践。通过创建 `request.js` 文件,定义基础 URL 并传入后端提供的 URL 作为请求参数。同时,配置请求方法(如 GET、POST)和请求头(例如包含 token 的认证信息),以实现高效、安全的 API 调用。此外,我们还将介绍如何处理请求和响应的错误,以及如何优化请求性能,确保应用在不同平台上的兼容性和稳定性。 ... [详细]
  • 基于Node.js的高性能实时消息推送系统通过集成Socket.IO和Express框架,实现了高效的高并发消息转发功能。该系统能够支持大量用户同时在线,并确保消息的实时性和可靠性,适用于需要即时通信的应用场景。 ... [详细]
  • 探索JavaScript倒计时功能的三种高效实现方法及代码示例 ... [详细]
  • PHP中元素的计量单位是什么? ... [详细]
  • 本文详细解析了如何使用 jQuery 实现一个在浏览器地址栏运行的射击游戏。通过源代码分析,展示了关键的 JavaScript 技术和实现方法,并提供了在线演示链接供读者参考。此外,还介绍了如何在 Visual Studio Code 中进行开发和调试,为开发者提供了实用的技巧和建议。 ... [详细]
  • 微信支付授权目录配置详解及操作步骤
    在使用微信支付时,若通过WeixinJSBridge.invoke方法调用支付功能,可能会遇到“当前页面URL未注册”的错误提示,导致get_brand_wcpay_request:fail调用微信JSAPI支付失败。为解决这一问题,需要正确配置微信支付授权目录,确保支付页面的URL已成功注册。本文将详细介绍微信支付授权目录的配置步骤和注意事项,帮助开发者顺利完成支付功能的集成与调试。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • 在Java中,匿名函数作为一种无名的函数结构,无法独立调用;而在JavaScript中,不仅有类似的匿名函数,还有立即执行函数(IIFE)和闭包等高级特性。立即执行函数同样基于匿名函数实现,但会在定义时立即执行,而闭包则通过嵌套函数来捕获外部变量,实现数据封装和持久化。这些不同的函数形式在实际开发中各有应用场景,理解其特点有助于更好地利用语言特性进行编程。 ... [详细]
  • 深入解析:JavaScript中的表达式与语句有何不同
    深入解析:JavaScript中的表达式与语句有何不同 ... [详细]
  • 利用 JavaScript 实现定时任务的高效执行方法(代码可直接复用) ... [详细]
  • 可转债数据智能抓取与分析平台优化
    本项目旨在优化可转债数据的智能抓取与分析平台。通过爬取集思录上的可转债信息(排除已发布赎回的债券),并结合安道全教授提出的三条安全线投资策略,新增了建仓线、加仓线和重仓线,以提供更精准的投资建议。 ... [详细]
  • JVM参数设置与命令行工具详解
    JVM参数配置与命令行工具的深入解析旨在优化系统性能,通过合理设置JVM参数,确保在高吞吐量的前提下,有效减少垃圾回收(GC)的频率,进而降低系统停顿时间,提升服务的稳定性和响应速度。此外,本文还将详细介绍常用的JVM命令行工具,帮助开发者更好地监控和调优JVM运行状态。 ... [详细]
  • voc生成xml 代码
    目录 lxmlwindows安装 读取示例 可视化 生成示例 上面是代码,下面有调用示例 api调用代码,其实只有几行:这个生成代码也很简 ... [详细]
  • HTML5大文件传输技术深度解析与实践分享
    本文深入探讨了HTML5在Web前端开发中实现大文件上传的技术细节与实践方法。通过实例分析,详细讲解了如何利用HTML5的相关特性高效、稳定地处理大文件传输问题,并提供了可供参考的代码示例和解决方案。此外,文章还讨论了常见的技术挑战及优化策略,旨在帮助开发者更好地理解和应用HTML5大文件上传技术。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有