arrays - 基于时间戳求和javascript数组
问题描述
我有 6 个 JSON,其中包含:来自功率计的时间戳值
我需要聚合 15 分钟时间戳中的值。
{
"data": [
[
[
1616968800000,
3159.1404000000007
],
[
1616968886400,
1288.7799999999997
],
[
1616968972800,
522.8924999999999
],
[
1616969059200,
446.1015
],
[
1616969145600,
2340.1559999999995
]
等等...
当我聚合时,我从时间戳开始:1616968800000
所以我需要循环所有其他 JSON 数组来获取值:1616968800000 到 1616969700000
但是当时间戳在2个时间戳中间时,他必须根据时间跨度计算值。
就是计算一个功率计。
谢谢!
解决方案
到目前为止我还没有聚合,因为不知道我该怎么做。
我正在绘制一个谷歌图表并用这个添加值:
function drawChart() {
// 487 = Bezug
// 486 = Lieferung
// 504 = PV
// 214 = Verbrauch
var json_day = 'http://192.168.0.202:8080/db/getdata?id=dlc&eid=487,486,504,214&range=yesterday';
var http_request_day = new XMLHttpRequest();
try {
// Opera 8.0+, Firefox, Chrome, Safari
http_request_day = new XMLHttpRequest();
} catch (e) {
// Internet Explorer Browsers
try {
http_request_day = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request_day = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {
// Something went wrong
alert("Your browser broke!");
return false;
}
}
}
http_request_day.onreadystatechange = function() {
if (http_request_day.readyState == 4) {
var data_line = new google.visualization.DataTable();
data_line.addColumn('date', 'Date');
data_line.addColumn('number', 'Verbrauch');
data_line.addColumn('number', 'PV');
data_line.addColumn('number', 'Bezug');
data_line.addColumn('number', 'Lieferung');
var jsonObj = JSON.parse(http_request_day.responseText);
var rows = [];
// Verbrauch
for (var i = 0; i < jsonObj.data[3].length; i++) {
// console.log(i);
var date = new Date(jsonObj.data[3][i][0]);
var consumption = parseFloat(jsonObj.data[3][i][1]);
date = new Date(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds());
dateNew = new Date(date.getFullYear(), date.getMonth(), date.getDate());
var pv = 0;
// search PV
for (var ii = 0; ii < jsonObj.data[2].length; ii++) {
var date = new Date(jsonObj.data[2][ii][0]);
if ( jsonObj.data[2][ii][0] >= jsonObj.data[3][i][0]) {
// console.log(i + "/" + ii);
pv = parseFloat(jsonObj.data[2][ii][1]);
break;
}
}
var bezug = 0;
// search Bezug
for (var ii = 0; ii < jsonObj.data[0].length; ii++) {
var date = new Date(jsonObj.data[0][ii][0]);
if ( jsonObj.data[0][ii][0] >= jsonObj.data[3][i][0]) {
// console.log(i + "/" + ii);
bezug = parseFloat(jsonObj.data[0][ii][1]);
break;
}
}
var lieferung = 0;
// search Lieferung
for (var ii = 0; ii < jsonObj.data[1].length; ii++) {
var date = new Date(jsonObj.data[1][ii][0]);
if ( jsonObj.data[1][ii][0] >= jsonObj.data[3][i][0]) {
// console.log(i + "/" + ii);
lieferung = parseFloat(jsonObj.data[1][ii][1]) * -1;
break;
}
}
data_line.addRow([date, consumption, pv, bezug, lieferung]);
}
var optionsLine = {
title: 'Energieverbrauch',
animation: {
duration: 1000,
easing: 'out',
startup: true
},
hAxis: {
gridlines: {
color: 'none'
},
gridThickness: 4,
format: 'HH:MM',
color: '#AAA',
fontName: 'Arial',
fontSize: '1'
},
interpolateNulls: true,
backgroundColor: {
fillOpacity: 0
},
legendTextStyle: {
color: '#AAA'
},
titleTextStyle: {
color: '#AAA'
},
series: {
0: {
color: '#0699fa',
lineWidth: 1
},
1: {
color: '#edd409',
lineWidth: 1
},
2: {
color: '#f1ca3a'
},
3: {
color: '#6f9654'
},
4: {
color: '#1c91c0'
},
5: {
color: '#43459d'
},
},
vAxis: {
gridlines: {
count: -1,
color: 'none'
},
gridThickness: 4,
format: '#,###W',
color: '#AAA',
fontName: 'Arial',
fontSize: '5',
minValue: 0
},
explorer: {
actions: ['dragToZoom', 'rightClickToReset'],
axis: 'horizontal',
keepInBounds: true,
maxZoomIn: 4.0
},
};
var container = document.getElementById('current');
var chartArea = new google.visualization.AreaChart(container);
但是在这里,我搜索下一个时间戳并添加到第一个......这不准确或不正确。
我需要计算超过 15 分钟的功率。我想要 15 分钟的间隔
示例 2:00:00, 5kW
00:15, 12kW
00:30, 12kW
这是第一个 15 分钟 5kW,第二个 12kW
00:00, 5kW
00:07, 10kw
00:15, 12kW
00:30, 12kW
这是前 15 分钟 7.7kW,
(5*(7 60) + 10 (8 60))/(15 60)
(2100 + 4800)/900 = 7.7kW
第二个 12kW
但是我需要从时间戳循环到时间戳......并计算过去和未来的时间,因为我找到了哪个时间戳。
推荐阅读
- typescript - 如何创建通用函数以从接口转换为实现类
- javascript - 如何将表单数据传递给控制器
- c# - 收到此错误“参数 2 无法从 'System.Collections.Generic.IEnumerable string ' 转换为 'string '”
- reactjs - 是否有任何用于 gcash 支付的 api 集成?
- android - JIT优化后如何查看Android代码?
- sql - 使用 WITH 语句 PostgreSQL 时列不存在
- wordpress - 有人在wordpress中注意到这个问题吗?
- react-native - 未捕获的错误。java.net.SocketTimeoutException
- kotlin - 从 Kotlin REPL 编译和运行程序
- c++ - 2D 向量 push_back