如何利用moment處理時(shí)間戳并計(jì)算時(shí)間的差值
項(xiàng)目使用nodejs寫(xiě)服務(wù)端,有個(gè)功能就是統(tǒng)計(jì)代理服務(wù)器流量,然后把統(tǒng)計(jì)的數(shù)據(jù)通過(guò)echarts渲染到頁(yè)面。
當(dāng)然統(tǒng)計(jì)數(shù)據(jù)這里用到了 定時(shí)器,在使用的是
var schedule = require( 'node-schedule');
有興趣的同學(xué)可以在npm上搜一搜關(guān)于js定時(shí)任務(wù)的事,其實(shí)都大同小異,差不多都是運(yùn)用corn表達(dá)式。
以下是我的 定時(shí)從代理服務(wù)器獲取數(shù)據(jù) 并存庫(kù)。
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()
});
});
現(xiàn)在來(lái)展示 需要根據(jù)前端傳過(guò)來(lái)的 時(shí)間戳 來(lái)篩選出數(shù)據(jù)的代碼,處理時(shí)間我用到了moment這個(gè)類(lèi)庫(kù),基本包含了時(shí)間所有的處理方法。
總結(jié)以下moment的幾個(gè)常用的函數(shù):
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天的數(shù)據(jù)
*/
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));
}總結(jié)
到此這篇關(guān)于如何利用moment處理時(shí)間戳并計(jì)算時(shí)間差值的文章就介紹到這了,更多相關(guān)moment處理時(shí)間戳?xí)r間差內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript實(shí)現(xiàn)的柱狀統(tǒng)計(jì)圖表
下面是完成后的預(yù)覽圖,可以看到,繪制一個(gè)表格,耗時(shí)0.005毫秒,也就是200分之一秒。效率我還是比較滿意的!2010-07-07
js網(wǎng)頁(yè)中的(運(yùn)行代碼)功能實(shí)現(xiàn)思路
網(wǎng)頁(yè)中的"運(yùn)行代碼"是一個(gè)很方便的功能,可以直接看到代碼的效果,感興趣的朋友不妨參考下,或許對(duì)你學(xué)習(xí)js有所幫助,好了花不多說(shuō)切入正題2013-02-02
Javascript和Java獲取各種form表單信息的簡(jiǎn)單實(shí)例
本篇文章主要是對(duì)Javascript和Java獲取各種form表單信息的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助2014-02-02
JavaScript學(xué)習(xí)筆記之ES6數(shù)組方法
ES6給數(shù)組添加了一些新特性,而這些新特性到目前為止完全可以運(yùn)用到自己的業(yè)務(wù)層。在這一節(jié)中將總結(jié)有關(guān)于ES6給數(shù)組提供一些新特性的使用方法2016-03-03
跟我學(xué)Nodejs(一)--- Node.js簡(jiǎn)介及安裝開(kāi)發(fā)環(huán)境
這篇文章主要介紹了Node.js簡(jiǎn)介及安裝開(kāi)發(fā)環(huán)境,需要的朋友可以參考下2014-05-05
JS實(shí)現(xiàn)的網(wǎng)頁(yè)背景閃電閃爍效果代碼
這篇文章主要介紹了JS實(shí)現(xiàn)的網(wǎng)頁(yè)背景閃電閃爍效果代碼,涉及JavaScript定時(shí)函數(shù)結(jié)合頁(yè)面元素樣式操作的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-10-10
用JavaScript做一個(gè)簡(jiǎn)易計(jì)算器的三種方法舉例
這篇文章主要給大家介紹了關(guān)于用JavaScript做一個(gè)簡(jiǎn)易計(jì)算器的三種方法,JS中實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器并不困難,我們只需利用基本的數(shù)學(xué)運(yùn)算符和JavaScript的語(yǔ)法即可,需要的朋友可以參考下2023-10-10
Echarts動(dòng)態(tài)加載多條折線圖的實(shí)現(xiàn)代碼
這篇文章主要介紹了Echarts動(dòng)態(tài)加載多條折線圖的實(shí)現(xiàn)代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05

