Javascript 我如何评估时间?

Javascript 我如何评估时间?,javascript,Javascript,您好,我使用javascript编写了以下代码: var begin1 = new Date('December 17, 1995 08:00:00'); var begin2 = new Date('December 17, 1995 08:01:00'); var begin3 = new Date('December 17, 1995 10:00:00'); var begin4 = new Date('December 17, 1995 16:00:00'); var end1

您好,我使用javascript编写了以下代码:

var begin1 = new Date('December 17, 1995 08:00:00');    
var begin2 = new Date('December 17, 1995 08:01:00');
var begin3 = new Date('December 17, 1995 10:00:00');
var begin4 = new Date('December 17, 1995 16:00:00');

var end1 = new Date('December 17, 1995 08:30:00');
var end2 = new Date('December 17, 1995 09:00:00');
var end3 = new Date('December 17, 1995 11:00:00');
var end4 = new Date('December 17, 1995 16:30:00');

begin = [begin1, begin2, begin3, begin4];
end = [end1, end2, end3, end4];
基本上,我有很多插槽,比如begin1-end1、begin2-end2、begin3-end3、begin4-end4

我想做的是这样评估时间:

开始1(08:00:00)-结束1(08:30:00):
30分钟

对于begin2(08:01:00)-end2(09:00:00):59分钟,但是如果我看变量begin1,就有部分(08:00:00)-(08:30:00),所以对于begin2(08:01:00)-end2(09:00:00),我们只计算部分(08:30:00)-(09:00),所以它是
30分钟

开始3(10:00:00)-结束3(11:00:00):
1小时

开始4(16:00:00)-结束3(16:30:00):
30分钟

因此,如果我计算总和,我得到30分钟+30分钟+1小时+30分钟=2h30

如何使用javascript获得此结果

多谢各位

编辑:基本上,我的意思是,我一天有很多日期,我想评估这个日期的时间,例如,如果我有08:00:00-08:30:00,它是30分钟,但是如果我也有08:10:00-09:00:00,我希望只有08:30:00-09:00:00,因为我还有08:00:00-08:30:00。所以持续时间是一个小时

编辑1:这张图片将准确地解释我想要什么:


你的帖子不清楚

如果我理解得很好,你可以这样做:

var date1 = new Date('December 17, 1995 03:24:00');
var date2 = new Date('December 17, 1995 03:34:00');
minutes = ((date2-date1)/1000)/60; //Get minutes of difference 
编辑

我创建了一个示例脚本,但没有经过很好的测试。如果您已根据begin:

function f(){
  var begin1 = new Date('December 17, 1995 08:00:00');  
  var begin2 = new Date('December 17, 1995 08:01:00');
  var begin3 = new Date('December 17, 1995 08:10:00');
  var begin4 = new Date('December 17, 1995 10:00:00');
  var begin5 = new Date('December 17, 1995 16:00:00');

  var end1 = new Date('December 17, 1995 08:30:00');
  var end2 = new Date('December 17, 1995 09:00:00');
  var end3 = new Date('December 17, 1995 09:20:00');
  var end4 = new Date('December 17, 1995 11:00:00');
  var end5 = new Date('December 17, 1995 16:30:00');

  begin = [begin1, begin2, begin3, begin4, begin5 ];
  end = [end1, end2, end3, end4, end5];

  duration = [[begin1, end1]];
  console.log(duration.length);
  for(i=1 ; i<begin.length; i++){
    for(j=0; j<duration.length; j++){
      if(begin[i]>= duration[j][0] && begin[i]<= duration[j][1] ){
         if(end[i]<= duration[j][1] ){
           break;
         }else{
           duration[j][1] = end[i];
           break;
         }
    }else{
      if(j==duration.length-1){
        console.log(begin[i]);
        duration.push([begin[i], end[i]]);
        break;
      }else{
        continue;
      }

    }
  }
  }
  var diff = 0;
  var i = 1;
  duration.forEach(function(element){
      console.log("Time range " + i + ": " + element);
      diff= diff + (element[1]- element[0])/1000/60;
      i++;
  });
    console.log("Total Minutes: " + diff);
  }

f();
函数f(){
var begin1=新日期('1995年12月17日08:00:00');
var begin2=新日期('1995年12月17日08:01:00');
var begin3=新日期('1995年12月17日08:10:00');
var begin4=新日期('1995年12月17日10:00:00');
var begin5=新日期('1995年12月17日16:00:00');
var end1=新日期('1995年12月17日08:30:00');
var end2=新日期('1995年12月17日09:00:00');
var end3=新日期('1995年12月17日09:20:00');
var end4=新日期('1995年12月17日11:00:00');
var end5=新日期('1995年12月17日16:30:00');
begin=[begin1,begin2,begin3,begin4,begin5];
end=[end1,end2,end3,end4,end5];
持续时间=[[begin1,end1]];
console.log(持续时间.长度);

对于(i=1;i来说,首先要了解以这种方式解析日期可能会有问题。下面是一些关于这个主题的好文章:


但是,假设您理解这些限制,并且代码返回的对象为您提供了可接受的结果,那么答案就相当简单了

首先要知道的是,你可以直接从一个日期减去另一个日期,得到差值(毫秒)。一些简单的算术将其转换为秒或分钟

var begin1=新日期('1995年12月17日08:00:00');
var end1=新日期('1995年12月17日08:30:00');
var diffMs=end1-begin1;
控制台日志(diffMs+“ms”)
var diffS=diffMs/1000;
console.log(diffS+“s”);
var diffM=diffS/60;

控制台日志(diffM+“分钟”)
@Jamiec这不是一个粗鲁的网站-在SO/JS上已经被问了数千次的主题上,没有尝试就发布一些任务是不礼貌的。如果他们至少在谷歌上提到了一些现有的主题,以及为什么他们不回答他们的问题,那将是不同的。链接解释了这一点,但显然,他们是“粗鲁”的和“应该删除”。那么,如果这个问题被问了数千次,那么重复的问题在哪里?抱歉,但这是本网站帮助人们的目标。编辑带来了更大的复杂性。不,我的意思是我一天有很多日期,我想评估这个日期的时间,例如,如果我有08:00:00-08:30:00,它是30分钟,但如果有还有08:10:00-09:00:00我只想有08:30:00-09:00:00,因为我还有08:00:00-08:30:00。所以持续时间是一个小时。现在更清楚了。请编辑您的问题,使其更清晰clear@Pierre尝试上面的代码片段谢谢,但结果应该是180分钟,而不是179分钟=10740000毫秒?@Pierre 30+59+60+30=179。你是说关于你处理重叠时间的额外复杂性?在这种情况下,我想你是在150分钟之后。对不起,我的意思是应该是30+(60-30)+60+30=150分钟,因为08:00:00-08:30:00是30分钟,而08:01:00-09:00:00是59分钟,但我们有08:00:00-08:30:00,所以是30分钟,然后我们有60分钟(08:00:00-09:00:00)我mean@Pierre您能确保日期在
begin
end
中排序吗?基本上,begin1的结尾是end1,begin2的结尾是end2,begin3的结尾是end3,begin4的结尾是end4