如何使用 moment js 获取日期数组中最近的下一个日期?
How do i get the closest next date in an array of dates using moment js?
好的,我需要在这个日期数组中获取最近的日期 (hours/minutes),无论日期离当前日期有多远,比如现在是 13:55PM 和这个数组有
[
11:41,
14:20,
15:30,
22:05,
23:16,
]
所以这里最近的日期是14:20,如果当前时间是15:31,那么从这个新的当前时间开始的下一个最接近的日期是22:05,不管多远日期是(今天),下一个最接近的日期是下一个,问题是,每当我 运行 这个代码,它一直告诉我下一个是 15:30,如果当前时间是 7:20 举个例子,下一个最接近的日期是你猜怎么着,15:30 :(
这是我运行宁
的代码
getFechaSiguiente() {
// Current time in millis
const now = +Moment(Moment().format('HH:mm'), 'HH:mm').format('x');
// Times in milliseconds
const timesInMillis = DataManager.ListaFechaCita.map(t => +Moment(t, 'HH:mm').format('x')); //times.map(t => +moment(t, "HH:mm").format("x"));
function closestTime(arr: any, time: any) {
return arr.reduce(function(prev: any, curr: any) {
return Math.abs(curr - time) < Math.abs(prev - time) ? curr : prev;
});
}
const closest = Moment(closestTime(timesInMillis, now)).format('HH:mm');
return closest;
}
假设DataManager.ListaFechaCita是日期数组
您可以根据给定值之间的时间差对数组进行排序,然后选择第一个元素:
例如:
a = [10,20,30,40,50]
b = 18
c = a.sort((x1,x2)=> Math.abs(x1-b) - Math.abs(x2-b) )[0] //20
相同的操作适用于 momentjs 对象:
a = [moment('10:30','HH:mm'),
moment('11:30','HH:mm'),
moment('15:30','HH:mm')]
b = moment('12:00','HH:mm')
c = a.sort((x1,x2)=> Math.abs(x1-b) - Math.abs(x2-b) )[0] // 11:30
您可以使用 times
数组中的 time
值和 return 正值来获取您的时间增量。
const times = [ '11: 41', '14: 20', '15: 30', '22: 05', '23: 16'];
const compareTime = moment('15:31', 'hh:mm');
const closestTime = times.find((time) => {
const diff = moment(time, 'hh:mm').diff(compareTime, 'minutes');
return diff >= 0;
});
console.log(closestTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>
好的,我需要在这个日期数组中获取最近的日期 (hours/minutes),无论日期离当前日期有多远,比如现在是 13:55PM 和这个数组有
[
11:41,
14:20,
15:30,
22:05,
23:16,
]
所以这里最近的日期是14:20,如果当前时间是15:31,那么从这个新的当前时间开始的下一个最接近的日期是22:05,不管多远日期是(今天),下一个最接近的日期是下一个,问题是,每当我 运行 这个代码,它一直告诉我下一个是 15:30,如果当前时间是 7:20 举个例子,下一个最接近的日期是你猜怎么着,15:30 :(
这是我运行宁
的代码 getFechaSiguiente() {
// Current time in millis
const now = +Moment(Moment().format('HH:mm'), 'HH:mm').format('x');
// Times in milliseconds
const timesInMillis = DataManager.ListaFechaCita.map(t => +Moment(t, 'HH:mm').format('x')); //times.map(t => +moment(t, "HH:mm").format("x"));
function closestTime(arr: any, time: any) {
return arr.reduce(function(prev: any, curr: any) {
return Math.abs(curr - time) < Math.abs(prev - time) ? curr : prev;
});
}
const closest = Moment(closestTime(timesInMillis, now)).format('HH:mm');
return closest;
}
假设DataManager.ListaFechaCita是日期数组
您可以根据给定值之间的时间差对数组进行排序,然后选择第一个元素:
例如:
a = [10,20,30,40,50]
b = 18
c = a.sort((x1,x2)=> Math.abs(x1-b) - Math.abs(x2-b) )[0] //20
相同的操作适用于 momentjs 对象:
a = [moment('10:30','HH:mm'),
moment('11:30','HH:mm'),
moment('15:30','HH:mm')]
b = moment('12:00','HH:mm')
c = a.sort((x1,x2)=> Math.abs(x1-b) - Math.abs(x2-b) )[0] // 11:30
您可以使用 times
数组中的 time
值和 return 正值来获取您的时间增量。
const times = [ '11: 41', '14: 20', '15: 30', '22: 05', '23: 16'];
const compareTime = moment('15:31', 'hh:mm');
const closestTime = times.find((time) => {
const diff = moment(time, 'hh:mm').diff(compareTime, 'minutes');
return diff >= 0;
});
console.log(closestTime);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.1/moment.min.js" integrity="sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==" crossorigin="anonymous"></script>