javascript - 时间是否在 Interval 内?

标签 javascript time

我正在尝试检查时间是否在时间间隔内。

我有一个currentTime-变量(作为字符串),其格式如下:

让 currentTime = "08:45"

我还有一个具有以下格式的timeInterval变量(作为字符串):

让 timeInterval = "08:40 - 09:20"

我想检测的是指定变量“currentTime”中的时间是否符合给定的“时间间隔”?

<小时/>

到目前为止我尝试过的是这样的:

let isInsideInterval = function(currentTime, timeInterval) {
  let currentHour = parseInt(currentTime.split(":")[0]),
      currentMinute = parseInt(currentTime.split(":")[1]),
      interval = {
        startHour: parseInt(timeInterval.split(" - ")[0].split(":")[0]),
        startMinute: parseInt(timeInterval.split(" - ")[0].split(":")[1]),
        endHour: parseInt(timeInterval.split(" - ")[1].split(":")[0]),
        endMinute: parseInt(timeInterval.split(" - ")[1].split(":")[1])
    }
  
  let isAfterStart = (currentHour*60+currentMinute) - (interval.startHour*60+interval.startMinute) > 0 ? 1 : 0;
  let isAfterEnd = (currentHour*60+currentMinute) - (interval.endHour*60+interval.endMinute) < 0 ? 1 : 0;
  return isAfterStart && !isAfterEnd;
}

let currentTime_1 = "08:45"
let timeInterval_1 = "08:40 - 09:20"
let result_1 = isInsideInterval(currentTime_1, timeInterval_1)

console.log(`* '${currentTime_1}' is ${result_1 ? "inside" : "not inside"} timeinterval '${timeInterval_1}'`)


/* ----- */

let currentTime_2 = "5:02"
let timeInterval_2 = "22:40 - 09:20"
let result_2 = isInsideInterval(currentTime_2, timeInterval_2)

console.log(`* '${currentTime_2}' is ${result_2 ? "inside" : "not inside"} timeinterval '${timeInterval_2}'`)

该函数的基础知识正在工作,但看起来我缺少某种“模”操作 - 我不知道如何实现以验证给定这些参数的 timeInterval:

let currentTime = "5:02"
let timeInterval = "22:40 - 09:20"

最佳答案

让 javascript 帮助您 - 将时间解析为日期对象,如果“to”在“from”之前,则添加一天,然后只需使用 <=>=

function parseTime(t) {
  var d = new Date();
  var time = t.match(/(\d+)(?::(\d\d))?\s*(p?)/);
  d.setHours(parseInt(time[1]) + (time[3] ? 12 : 0));
  d.setMinutes(parseInt(time[2]) || 0);
  return d;
}

function isInRange(t, range) {
  var tt = parseTime(t);
  var timeFrom = parseTime(range.split("-")[0])
  var timeTo = parseTime(range.split("-")[1])
  if (timeTo < timeFrom) timeTo.setDate(timeTo.getDate() + 1);

  return tt >= timeFrom && tt <= timeTo;
}

console.log(isInRange("11:00", "10:30 - 14:30"))
console.log(isInRange("18:00", "10:30 - 14:30"))
console.log(isInRange("22:15", "20:00 - 08:00"))

parseTime取自What is the best way to parse a time into a Date object from user input in Javascript?

<小时/>

解决您有关如何处理 to<from 的具体问题,上面我使用了 Date 对象并添加了 1 天。在您的代码中,您将检查是否 to<from然后将 24 小时添加到 interval.endHour

关于javascript - 时间是否在 Interval 内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680241/

相关文章:

javascript - 在为第二个图像创建文字对象后,如何使用 WASD 键移动第二个图像

javascript - 如何从 core-js 中挑选模块

c++ - 为什么 boost::timer 的结果如此奇怪?

python - 如何解析time.time()?

javascript - 我如何强制 jQuery 留在本地?

javascript - 在嵌入组件中响应 onClick 事件调用序列

javascript - 每个辅助函数的结果?

R - 计算每天最接近 X 的时间

ruby - 一年中的周数,有点

javascript - Twitter 风格的前一段时间格式化 ("2h")与 Javascript