Javascript 查找最接近给定24小时时间的时间
给定函数签名:Javascript 查找最接近给定24小时时间的时间,javascript,time,Javascript,Time,给定函数签名: getNearestToDesiredTime(左、中、右、desiredTime) 其中: 左、中、右可能是24小时有效时间(1830,-11900) desiredTime是所需的24小时时间(1845) 您如何找到最接近所需时间的时间 在时间参数都与所需时间等距的情况下,应返回后面的时间。(在上面的示例中,应该返回1900,因为1900和1830距离所需的1845都15分钟) 到目前为止,这就是我所拥有的,但似乎不太管用 const timeDiffInMinutes
getNearestToDesiredTime(左、中、右、desiredTime)
其中:
左、中、右可能是24小时有效时间(
)1830,-11900
是所需的24小时时间(desiredTime
)1845
1900
,因为1900
和1830
距离所需的1845
都15
分钟)
到目前为止,这就是我所拥有的,但似乎不太管用
const timeDiffInMinutes = (t1, t2) => {
const t1Mins = t1 / 100 * 60 + t1 % 100;
const t2Mins = t2 / 100 * 60 + t2 % 100;
return t2Mins - t1Mins;
};
const getNearestToDesiredTime = (left, middle, right, desiredTime) => {
if (middle !== -1) {
return middle;
} else if (left === -1 && right === -1) {
return null;
}
// result should be whatever time is _closest_ to the desiredTime.
// if both options are equi-distant to the desired time, show the later time.
const leftIsCloser =
timeDiffInMinutes(desiredTime, left) <
timeDiffInMinutes(desiredTime, right);
return leftIsCloser ? left : right;
};
稍微修改它,使其处理时间数组更加通用。我们跟踪最佳差异,然后返回产生差异的时间
//这应该是1900
log(getNearestToDesiredTime([183019001945],1900))
//这应该是1915年
log(getNearestToDesiredTime([183019151451900])
//这应该是1830年
log(getNearestToDesiredTime([18301945],1845))
//这应该是1945年
log(getNearestToDesiredTime([18301945],1930))
//这应该是1900年
log(getNearestToDesiredTime([18301900],1845))
功能时间差分分钟(t1、t2){
常数T1min=数学楼层(t1/100)*60+t1%100;
常数t2min=数学楼层(t2/100)*60+t2%100;
返回时间为2分钟-1分钟;
};
函数getNearestToDesiredTime(时间,目标){
var best=无穷大;
var最佳指数=-1;
对于(var i=0;i 如果(差异此解决方案使用不同的方法。它计算所有三个时间戳从午夜开始的分钟数,然后使用左
和右
时间戳与所需
时间戳之间的差异来确定最接近的时间戳
我用很多时间戳测试了它。还有一些奇怪的时间戳。到目前为止,似乎对所有人都很好
希望这有帮助
const minutesFromMidnight=(t)=>{
常数分形=t/100;
常数小时=数学真实值(分形);
常数分钟=(分数小时)*100;
const minsOfDay=(小时*60)+分钟;
var minutesDist=0;
如果(日分钟数>=720)
minutesDist=一天的分钟数-1440;
其他的
minutesDist=一天的分钟数;
返回分钟距离;
};
const getNearestToDesiredTime=(左、中、右、desiredTime)=>{
如果(中间!=-1){
返回中间;
}else if(左==-1和右==-1){
返回null;
}
const desiredDist=从午夜开始的分钟数(desiredTime);
const leftDist=从午夜开始的分钟数(左);
const righdist=从午夜开始的分钟数(右);
const leftDiff=Math.abs(leftDist-desiredList);
const rightDiff=Math.abs(rightDist-desiredDist);
常量leftIsCloser=leftDiff log(getNearestToDesiredTime(130,-12315100)+'=130');
您的数据库中没有数组code@juvian复制粘贴错误。已更新。如果第二个结果应该是1915
,则出现问题。输出中是1830
。不是吗?@MarioWerner假设timeDiffInMinutes是正确的,似乎不是。已修复,感谢您注意到OK,但您遇到了与我相同的问题,当时我是在比较奇数时间时,尝试此timeDiffInMinutes
函数。例如getNearestToDesiredTime([1302300],10)
,目标是00:10
。距离23:00
还有70分钟,距离1:30
还有80分钟,但它仍然将130
显示为最近。它的工作原理如下:getNearestToDesiredTime([25302300],2410)
,但这不仅奇怪,而且时间符号错误。:D
// this should be 1900
console.log(getNearestToDesiredTime(1830, 1900, 1945, 1900))
// this should be 1915
console.log(getNearestToDesiredTime(1830, 1915, 1945, 1900))
// this should be 1830
console.log(getNearestToDesiredTime(1830, -1, 1945, 1845))
// this should be 1945
console.log(getNearestToDesiredTime(1830, -1, 1945, 1930))
// this should be 1900
console.log(getNearestToDesiredTime(1830, -1, 1900, 1845))