我有一些json数据,每天包含不同的时间。我必须根据日计算时间总和。这是我的JSON
[
{
"id":"1",
"monday_NT":"3:45",
"monday_TH":"2:45",
"monday_DT":"4:45",
"monday_DTH":"2:45",
},
{
"id":"2",
"monday_NT":"2:45",
"monday_TH":"5:45",
"monday_DT":"3:45",
"monday_DTH":"1:49",
}
]
我已经完成了这个计算,但是我为这个计算使用了太多变量。这是我星期一的代码:
var monday_NT_hr=0;
var monday_TH_hr=0;
var monday_DT_hr=0;
var monday_DTH_hr=0;
var monday_NT_min=0;
var monday_TH_min=0;
var monday_DT_min=0;
var monday_DTH_min=0;
for(var i=0;i<data.length;i++)
{
for(var index in data[i])
{
if(index=="monday_NT")
{
monday_NT_hr +=data[i][index].split(":")[0];
monday_NT_min +=data[i][index].split(":")[1];
}
if(index=="monday_TH")
{
monday_TH_hr +=data[i][index].split(":")[0];
monday_TH_min +=data[i][index].split(":")[1];
}
if(index=="monday_DT")
{
monday_DT_hr +=data[i][index].split(":")[0];
monday_DT_min +=data[i][index].split(":")[1];
}
if(index=="monday_DTH")
{
monday_DTH_hr +=data[i][index].split(":")[0];
monday_DTH_min +=data[i][index].split(":")[1];
}
}
}
是否有这么少的变量用于此计算? 请帮忙。
答案 0 :(得分:1)
如果我可以假设列出的每个值都是以小时和分钟为单位的时间,并且您希望找到所有时间的总和,则可以合并代码。
var total_time = 0;
for (var i = 0; i < data.length; i++) {
for (var attr in data[i]) {
if (attr != 'id') {
total_time += getSeconds(data[i][attr]);
}
}
}
total_time = secToFormatted(total_time); // Total time in a formatted string
function getSeconds(strTime) {
// Convert a string time to seconds
}
function secToFormatted(seconds) {
// Convert seconds into hours and minutes string
}
答案 1 :(得分:0)
您只需设置两个名为hours
和minutes
的对象,并根据原始数据中的确切密钥名称添加总和:
var hours = {},
minutes = {};
for (var i = 0, il = data.length; i < il; i++) {
for (var k in data[i]) {
var timeSplit = data[i][k].split(':'),
hour = parseInt(timeSplit[0], 10),
min = parseInt(timeSplit[1], 10);
hours[k] = hours[k] ? hours[k] + hour : hour;
minutes[k] = minutes[k] ? minutes[k] + min : min;
}
}
console.log(hours);
// {id: 3, monday_NT: 5, monday_TH: 7, monday_DT: 7, monday_DTH: 3}
console.log(minutes);
// {id: NaN, monday_NT: 90, monday_TH: 90, monday_DT: 90, monday_DTH: 94}
您可以忽略id
。
答案 2 :(得分:0)
这应该好多了:(fiddle)
var monday_NT= {min:0, hr:0};
var monday_TH={min:0, hr:0};
var monday_DT={min:0, hr:0};
var monday_DTH={min:0, hr:0};
function splitSum(obj, data) {
data = data.split(":");
obj.hr += Number(data[0]);
obj.min += Number(data[1]);
}
for(var i in arr) {
splitSum(monday_NT, arr[i].monday_NT);
splitSum(monday_TH, arr[i].monday_TH);
splitSum(monday_DT, arr[i].monday_DT);
splitSum(monday_DTH, arr[i].monday_DTH);
}
根据你的例子
monday_NT.min
等同于
monday_NT_min
虽然我相信所有这些艰苦的工作都没有带来额外的好处。
答案 3 :(得分:0)
如果你想在24hr formate中计算两次的时差
var time1 = "22:00"
var time2 = "01:00"
答案:3:00小时
var c = a.split(":")
var d = b.split(":")
var aH = parseInt(c[0])
var aM = parseInt(c[1])
var bH = parseInt(d[0])
var bM = parseInt(d[1])
if(aM > bH) {
bH -= 1
bM += 60
}
if(aH > bH) {
bH += 24
}
var hour = bH - aH
var min = bM - aM
console.log( hour + ":" + min)