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
  • desiredTime
    是所需的24小时时间(
    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=leftDifflog(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))