Javascript 我如何评估时间?
您好,我使用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
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