Javascript 如何计算多个时间范围的交集(最佳会议时间)?
给定5个不同的时间:Javascript 如何计算多个时间范围的交集(最佳会议时间)?,javascript,Javascript,给定5个不同的时间: 10am - 6pm 3pm - 10pm 4pm - 7pm 5pm - 1am 3pm - 12am 是否有一个算法来计算这些给定时间之间的最佳时间?比如说平均时间 我尝试将每一方相加,然后除以该方的次数,但当我尝试计算该时间的am和pm时,问题就出现了,因此某些时间必须以不同的方式加权,对吗?比如军事时间,晚上10点=22/12点=24/等等 我还没有为此编写任何代码,因为我一直在试图找到解决这个问题的方法,但它将用JavaScript编程 编辑: 6pm - 9
10am - 6pm
3pm - 10pm
4pm - 7pm
5pm - 1am
3pm - 12am
是否有一个算法来计算这些给定时间之间的最佳时间?比如说平均时间
我尝试将每一方相加,然后除以该方的次数,但当我尝试计算该时间的am
和pm
时,问题就出现了,因此某些时间必须以不同的方式加权,对吗?比如军事时间,晚上10点=22/12点=24/等等
我还没有为此编写任何代码,因为我一直在试图找到解决这个问题的方法,但它将用JavaScript编程
编辑:
6pm - 9pm
3pm - 8pm
4pm - 7pm
2pm - 10pm
5pm - 11pm
*6 + 3 + 4 + 2 + 5 = 20 / 5 = 4
*9 + 8 + 7 + 10 + 11 = 45 / 5 = 9
*best time range = 4pm - 9pm
这是我所说的一个例子,它没有考虑到am/pm
考虑到五个时间范围,我想找到一个最好的时间范围。如果你想知道所有持续时间的平均值,最简单的方法是首先转换为24小时;要考虑到一天的滚动,您可以在结束时间的基础上增加24小时,然后在24小时前获得结果
var timeRanges = [
[10,18],
[15,22],
[16,19],
[17,1],
[10,18]
];
var durations = timeRanges.map(function(range){
return ((range[1] + 24) - range[0]) % 24;
});
var totalDuration = durations.reduce(function(runningTotal, current){
return runningTotal + current
}, 0);
var meanDuration = totalDuration / durations.length;
<>我不确定这是你要找的,但是这就是我如何解释你的问题 < P>我会考虑使用Simult.js和Simul-Rang.js库,它可以快速计算一个或多个日期范围的交集。 但是,当您试图找到多个时间范围的交集时,会出现没有解决方案的情况,因此您可能希望找到大多数时间(而不是所有时间)可以满足的时间。此外,现实中,人们可能有多个可用的时间范围 我建议创建一个有序的对象数组,其中包含日期时间对象,无论是开始还是结束,以及它的对象。然后,您可以遍历该数组,并为每个日期时间将可用人员添加/删除到一个数组中。如果你到达一个所有参与者都有空的时间,你会发现下一个结束时间,这是一个可能的会议时间——你可能有多种解决方案
datesToCheck = [
{ date: yourDateObj, type: 'start', who: 'Juan' },
{ date: yourDateObj, type: 'end', who: 'Juan' },
{ date: yourDateObj, type: 'start', who: 'Juan' },
...
]
伪代码:
sort datesToCheck by date property;
for (i=0, i<datesToCheck.length, i++)
date = datesToCheck[i]
if date.type === 'start'
availablePeopleSet.add(date.who)
else
availablePeopleSet.remove(date.who)
if availablePeopleSet.size > mostAvailableFound
mostAvailableFound = availablePeopleSet.size
mostAvailableTimeStart = date;
排序日期按日期属性检查;
对于(i=0,我找到了最大可用性)
mostAvailableFound=availablePeopleSet.size
mostAvailableTimeStart=日期;
我将留给您来决定如何获得该范围内的结束日期(提示:它可能不是列表中的下一个日期),以及如何决定选择哪个时间范围,如何存储多个可行的解决方案,以及为每个人处理多个时间范围。我不确定您所说的“5个不同时间的平均值”是什么意思,您拥有的是时间范围,而不是时间尝试计算时间差的平均值,例如上午10点-下午6点->8小时,下午3点-晚上10点->7小时…然后将小时数除以时段数。首先,您必须定义一组时间范围之间的平均值。您可以给出一个示例(如您所做的)告诉我们预期的结果是什么。现在你只是有一个不太明确的问题。也许你正在试图计算平均时间跨度或平均持续时间。你需要先将下午时间转换为军事时间;你还需要以不同的方式处理下午5点到凌晨1点的特殊情况。也许你想找到适合大多数时间范围的时间范围(因为其中一些时间范围根本不重叠)。那么,您是否正试图为具有给定可用性范围的会议找到“最佳时间”?