这是对之前提出的问题的修改(在 javascript 中,如何从日期字符串“yyyy-mm-dd”或 timeStamp 中提取月份?),@mhodges 很好地解决了这个问题。
由于修改的性质,我认为创建一个新问题是合适的。
我有一个数据库,其中包含某些记录的事件作为 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},
log4: {
Date:"2016-08-15",
TimeStamp:1471248000,
Minutes:75}
在这个例子中,算法会计算出 2017 年 5 月有两条日志,一条日志在 2017 年 4 月,一条日志在 2016 年 8 月。
该算法还将返回 2017 年 5 月的 60 分钟、2017 年 4 月的 30 分钟和 2016 年 8 月的 75 分钟的总和。
任何有关修改@mhodges 之前提供的解决方案的帮助(请参阅(在 javascript 中,如何从日期字符串“yyyy-mm-dd”或 timeStamp 中提取月份?)),将其放入适当的嵌套输出中,将不胜感激!
我在修改 @mhodges 解决方案以实现它时遇到了麻烦,但设想如下:
{
"2016":{
"8": {
occurrences: 1,
minutes: 75
}
},
"2017":{
"4": {
occurrences: 1,
minutes: 30
},
"5": {
occurrences: 2,
minutes: 60
}
}
}
谢谢
从您的预期输出来看,您可能希望使用日期值而不是时间戳。您可以遍历日志并将每个月的分钟数相加。
它看起来像这样:
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
},
{
Date:"2016-08-15",
TimeStamp:1471248000,
Minutes:75
}
];
var result = {};
for (var i = 0; i < logs.length; i++) {
var year = logs[i].Date.slice(0, 4);
var month = logs[i].Date.slice(5, 7);
if (!result[year]) {
result[year] = {};
}
if (!result[year][month]) {
result[year][month] = {
occurences: 1,
minutes: logs[i].Minutes
}
continue;
}
result[year][month].occurences++;
result[year][month].minutes += logs[i].Minutes;
}
console.log(result);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句