我有一个数据库,其中包含某些记录的事件作为 json 对象,每个事件都有自己的 JS 毫秒时间戳和格式为“yyyy-mm-dd”的日期字符串,以及一个分钟条目。
我想使用时间戳或日期字符串,以更容易的方式作为输入到算法中,该算法将计算给定月份输入了多少日志。
我还希望该算法对给定月份中记录的累积分钟数求和。
例如,
log1: {
Date:"2017-05-24",
TimeStamp:1495612800,
Minutes: 15},
log2: {
Date:"2017-05-19",
TimeStamp:1495180800,
Minutes: 45},
log3: {
Date:"2017-04-24",
TimeStamp:1493020800,
Minutes:30}
在本例中,算法会计算出 5 月份有 2 条日志,4 月份有 1 条日志。
该算法还将返回 5 月份 60 分钟和 4 月份 30 分钟的总和。
将输入解析为适当的变量以进行计数的任何帮助将不胜感激!
谢谢
要从单个对象获取月份,它会像以下一样简单:
var month = new Date(log1.TimeStamp * 1000).getMonth() +1
getMonth() 从零开始,所以需要加 1
要计算每月发生的次数,您可以执行以下操作:
var logs = [{
Date: "2017-05-24",
TimeStamp: 1495612800,
Minutes: 15
},
{
Date: "2017-05-19",
TimeStamp: 1495180800,
Minutes: 45
},
{
Date: "2017-04-24",
TimeStamp: 1493020800,
Minutes: 30
}
];
var occurrences = logs.reduce(function (result, current) {
// multiply unix timestamp by 1000 to get ms
var date = new Date(current.TimeStamp * 1000);
var month = date.getMonth() + 1;
if (!result[month]) {
result[month] = {
occurrences: 0,
minutes: 0
};
}
result[month].occurrences++;
result[month].minutes += Number(current.Minutes);
return result;
}, {});
console.log(occurrences);
如果您想按年然后按月对日期进行分组,则只需对代码稍作更改。它看起来像下面这样:
var logs = [{
Date: "2017-05-24",
TimeStamp: 1495612800,
Minutes: 15
},
{
Date: "2017-05-19",
TimeStamp: 1495180800,
Minutes: 45
},
{
Date: "2017-04-24",
TimeStamp: 1493020800,
Minutes: 30
}
];
var occurrences = logs.reduce(function(result, current) {
// multiply unix timestamp by 1000 to get ms
var date = new Date(current.TimeStamp * 1000);
var year = date.getFullYear();
var month = date.getMonth() + 1;
// make sure result[year] is defined
if (!result[year]) {
result[year] = {};
}
// notice the original code below is now [year][month]
if (!result[year][month]) {
result[year][month] = {
occurrences: 0,
minutes: 0
};
}
result[year][month].occurrences++;
result[year][month].minutes += Number(current.Minutes);
return result;
}, {});
console.log(occurrences);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句