首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找最近的小时[javascript]

查找最近的小时[javascript]
EN

Stack Overflow用户
提问于 2020-05-27 19:25:51
回答 4查看 117关注 0票数 0

我有一个这些项目的列表:

hours = ['19:30', '20:10', '20:30', '21:00', '22:00']

假设现在是20:18,我如何从列表中获取“20:10”项?我想用它来查找电视指南中当前正在播放的节目。

EN

回答 4

Stack Overflow用户

发布于 2020-05-27 19:43:43

首先,我们应该以某种方式将其解析为datetime:

代码语言:javascript
复制
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;
}
代码语言:javascript
复制
var now = new Date();
var bestMatch = undefined;
var bestMatchDiff = undefined;

最后:

代码语言:javascript
复制
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将是最接近的时间。这不是当前正在播放的节目。为此,您需要忽略尚未到来的时间:

代码语言:javascript
复制
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

票数 0
EN

Stack Overflow用户

发布于 2020-05-27 21:05:51

代码语言:javascript
复制
    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)
票数 0
EN

Stack Overflow用户

发布于 2020-05-27 23:43:30

要找到当前正在运行的节目(当然需要添加更多的验证):

代码语言:javascript
复制
const currentShow = hours[
  hours.findIndex(
    (c) => new Date(`01/01/2000 ${c}`) - new Date(`01/01/2000 20:31`) >= 0
  ) - 1
];

要找到下一个节目:

代码语言:javascript
复制
const nextShow = hours.find(
  (c) => new Date(`01/01/2000 ${c}`) - new Date(`01/01/2000 20:31`) >= 0
);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62041958

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档