给出5个不同的时间:
10am - 6pm
3pm - 10pm
4pm - 7pm
5pm - 1am
3pm - 12am
是否有算法计算给定时间之间的最佳时间?比如平均时间?
我已尝试将每一方加起来并除以该方的次数,但问题出现在我尝试计算am
和pm
的时间,所以有时会必须加权不同吗?像军事时间10pm = 22 / 12am = 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
。
我希望找到一个最好的时间范围,给定五个时间范围。
答案 0 :(得分:1)
如果你想知道所有持续时间的平均值,最简单的方法是先转换为24小时;考虑到日翻转,你可以在结束时间增加24小时,然后通过24获得MOD结果。
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;
我不确定这是你在找什么,但这就是我解释你的问题的方法
答案 1 :(得分:0)
我会考虑使用moment.js和moment-range.js库,它们可以快速计算一个或多个日期范围的交集。
https://github.com/gf3/moment-range#contains--within--overlaps--intersect--add--subtract
但是,当您尝试查找多个时间范围的交集时,会出现无解的情况,因此您可能希望找到大多数时间范围内的时间(不是全部)。而且,实际上,人们可能有多个可用时间范围。
我建议创建一个包含日期时间对象的排序对象数组,无论它是开始还是结束,以及它的用途。然后,您可以遍历数组并在每个日期时间将可用人员添加/删除到数组上。如果您到达所有参与者都可用的时间,您会找到下一个结束时间,这是一个可能的会议时间 - 您可能有多个解决方案。
$icon-font-path: '/css/fonts/';
伪代码:
datesToCheck = [
{ date: yourDateObj, type: 'start', who: 'Juan' },
{ date: yourDateObj, type: 'end', who: 'Juan' },
{ date: yourDateObj, type: 'start', who: 'Juan' },
...
]
我会留给你弄清楚如何获得该范围内的结束日期(提示:它可能不是列表中的下一个日期),以及如何决定选择哪个时间范围,如何存储多个可行的解决方案,并为每个人处理多个时间范围。