如何使用矩找到与给定时间最接近的时间?

时间:2019-04-12 02:31:30

标签: javascript momentjs

所以我有一个简单的代码,一个工作代码,它使用矩来获得与给定时间的最近时间。

// Current time in millis
const now = +moment('10:16', 'HH:mm').format('x');
// List of times
const times = ["10:00", "10:18", "23:30", "12:00"];
// Times in milliseconds
const timesInMillis = times.map(t => +moment(t, "HH:mm").format("x"));

function closestTime(arr, time) {
  return arr.reduce(function(prev, curr) {
    return Math.abs(curr - time) < Math.abs(prev - time) ? curr : prev;
  });
}

const closest = moment(closestTime(timesInMillis, now)).format('HH:mm');

// closest is 10:18 but wanted to get 10:00
console.log(closest);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>

所以我想做的是在给定时间之前但在同一分钟内获取最近的时间?因此,在该示例中,给定时间为10:16,在数组中我们有10:00和10:18,因此输出必须为10:00,因为它是给定时间之前的最近时间,且具有相同的分钟(10)

我不知道我的帖子是否明确,但随时可以发表一些评论。谢谢!

1 个答案:

答案 0 :(得分:1)

摆脱Math.abs,这样您才有时间。

// Current time in millis
const now = +moment('10:16', 'HH:mm').format('x');
// List of times
const times = ["10:00", "10:18", "23:30", "12:00"];
// Times in milliseconds
const timesInMillis = times.map(t => +moment(t, "HH:mm").format("x"));

function closestTime(arr, time) {
  return arr.reduce(function(prev, curr) {
    return (curr - time) < (prev - time) ? curr : prev;
  });
}

const closest = moment(closestTime(timesInMillis, now)).format('HH:mm');

// closest is 10:18 but wanted to get 10:00
console.log(closest);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js"></script>