我有一个这些项目的列表:
hours = ['19:30', '20:10', '20:30', '21:00', '22:00']
假设现在是20:18,我如何从列表中获取“20:10”项?我想用它来查找电视指南中当前正在播放的节目。
发布于 2020-05-27 19:43:43
首先,我们应该以某种方式将其解析为datetime:
function parseTime(str) {
var values = str.split(':');
var hour = parseInt(values[0]);
var minutes = parseInt(values[1]);
var d = new Date();
d.setHours(hour);
d.setMinutes(minutes);
return d;
}var now = new Date();
var bestMatch = undefined;
var bestMatchDiff = undefined;最后:
for(var i=0; i<hours.length; i++) {
var parsedTime = parseTime(hours[i]);
var diff = Math.abs(now - parsedTime);
if (!bestMatchDiff || bestMatchDiff>diff) {
bestMatch = parsedTime;
bestMatchDiff = diff;
}
}bestMatch将是最接近的时间。这不是当前正在播放的节目。为此,您需要忽略尚未到来的时间:
for(var i=0; i<hours.length; i++) {
var parsedTime = parseTime(hours[i]);
var diff = Math.abs(now - parsedTime);
if (now<parsedTime) {
continue;
}
if (!bestMatchDiff || bestMatchDiff>diff) {
bestMatch = parsedTime;
bestMatchDiff = diff;
}
}但请记住,即使您的列表不为空,这也可能返回undefined。
发布于 2020-05-27 21:05:51
var hours = ['19:30', '20:10', '20:30', '21:00', '22:00']
var diffrenceTime
var selectedShow
var d1 = new Date()
var currentHH = 20
var currentMM = 18
d1.setHours(currentHH, currentMM, 0)
hours.forEach(v => {
var d2 = new Date()
var hh = v.split(':')[0]
var mm = v.split(':')[1]
d2.setHours(hh, mm, 0)
if (diffrenceTime == undefined) {
diffrenceTime = d2 - d1
selectedShow = v
}
if (d2 - d1 < 0 && d2 - d1 >= diffrenceTime) {
diffrenceTime = d2 - d1
selectedShow = v
}
})
console.log(selectedShow)发布于 2020-05-27 23:43:30
要找到当前正在运行的节目(当然需要添加更多的验证):
const currentShow = hours[
hours.findIndex(
(c) => new Date(`01/01/2000 ${c}`) - new Date(`01/01/2000 20:31`) >= 0
) - 1
];要找到下一个节目:
const nextShow = hours.find(
(c) => new Date(`01/01/2000 ${c}`) - new Date(`01/01/2000 20:31`) >= 0
);https://stackoverflow.com/questions/62041958
复制相似问题