Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 计算总时间_Javascript_Arrays_Json - Fatal编程技术网

Javascript 计算总时间

Javascript 计算总时间,javascript,arrays,json,Javascript,Arrays,Json,我有一些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",

我有一些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];
        }
    }
}
var星期一\u NT\u hr=0;
var星期一小时=0;
var周一_DT_hr=0;
var周一小时小时=0;
var星期一\u NT\u min=0;
var星期一最小值=0;
var周一_DT_min=0;
var星期一\u DTH\u min=0;

对于(var i=0;i,如果我可以假设列出的每个值都是以小时和分钟为单位的时间,并且您希望找到所有时间的总和,那么您可以潜在地合并代码

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
}
var总时间=0;
对于(变量i=0;i
如果我可以假设列出的每个值都是以小时和分钟为单位的时间,并且您希望找到所有时间的总和,那么您就有可能合并代码

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
}
var总时间=0;
对于(变量i=0;i
您只需设置两个名为
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}
var hours={},
分钟={};
对于(var i=0,il=data.length;i
您可以忽略
id


您只需设置两个名为
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}
var hours={},
分钟={};
对于(var i=0,il=data.length;i
您可以忽略
id


这应该更好:()

根据你的例子

monday_NT.min
相当于

monday_NT_min


虽然我相信所有这些艰苦的工作都不会带来额外的好处。

这应该更好:()

根据你的例子

monday_NT.min
相当于

monday_NT_min


尽管我相信所有这些艰苦的工作都不会带来额外的好处。

如果你想计算24小时格式中两倍的时差

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)

如果要计算24小时格式中两次的时差

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)

这里你需要更清楚。你想实现什么?你说的“时间之和”是什么意思?使用这么多变量没有错,它编写得很好,也很容易理解。另一种方法是使用“?”和“:”运算符。我认为它看起来不错,对我来说没有必要更改。你可以编写一个转换的函数然后将时间加在一起。
seconds
中的时间加在一起。这样您就可以对以下各项重复使用此函数:
monday\u NT
monday\u TH
,等等。更易于维护的代码,因为这样您就不会对每个项重复该逻辑4次。@tmwoods这里的时间总和意味着我必须计算小时和分钟。例如monday\n="3:45",是一个时间值,并计算每个星期一的总和。同样,对于所有的星期一、星期一和星期一,你需要在这里更加清楚。你想完成什么?你所说的“时间总和”是什么意思?使用这么多变量没有错,它写得很好,也很容易理解。另一种选择是使用“?”和:“运算符我认为它看起来很好,对我来说没有必要更改。您可以编写一个函数,将时间转换为秒,然后将其相加。这样您就可以对以下各项重复使用此函数:
monday\u NT
monday\u TH
,等等。更易于维护的代码,因为这样您就不会将该逻辑复制4次或者每个。@tmwoods这里的时间总和意味着我必须计算小时和分钟。例如,星期一\u NT=“3:45”,是一个时间值,并计算每个星期一的总和。同样,对于所有星期一、星期一和星期一,请将代码添加到此处,因为它当前是仅链接的答案。请将代码添加到此处,因为它当前是仅链接的答案