首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >确定当前时间是否在时间范围数组内

确定当前时间是否在时间范围数组内
EN

Stack Overflow用户
提问于 2017-06-16 12:08:21
回答 3查看 508关注 0票数 0

对于一个用javascript编写的网站拦截/生产力应用程序,我想让用户输入一系列空闲时间可用的时间范围(在他的本地时间)。示例:

06:00-06:30

12:30-13:00

23:45-00:15

24格式不是必需的(我只是假设它会更容易)

然后,程序应根据当前时间检查指定的空闲时间范围,以确定块模式是打开还是关闭。

我的粗略想法是使用一个内置的Javascript函数来抓取当前的DateTime,并在必要时将其转换为24小时格式。我认为时间范围将在一个数组中。我不确定如何检查当前日期是否在数组的范围内。

逻辑还必须能够处理从23:00到0:00的交叉。

无论如何,这就是我的思路。感谢你的任何建议,包括那些采取不同道路的建议。

EN

回答 3

Stack Overflow用户

发布于 2017-06-16 12:12:39

无论如何,

这就是我的思路。感谢你的任何建议,包括那些采取不同道路的建议。

如果要检查当前时间是否在范围内,则范围应为日期+时间,因为当前时间是日期+时间

可能的解决方案

您可以将所有三个datetimes转换为moment实例,只需使用

代码语言:javascript
运行
复制
start.isBefore(current)
&& current.isBefore(end)

isBeforeisAfter上的Moment文档:https://momentjs.com/

票数 0
EN

Stack Overflow用户

发布于 2017-06-16 12:34:51

“我不确定如何检查当前日期是否在数组的范围内。”

您将遍历数组并进行比较。我建议将范围存储为对象数组,其中每个单独的范围类似于{start: "10:15", end: "10:45"}

JavaScript没有time对象,只有包含日期和时间信息的Date。因此,我认为最简单的方法是将当前时间转换为"hh:mm“格式的字符串,然后对范围值进行简单的字符串比较,而不是担心将范围值转换为日期对象。所以:

代码语言:javascript
运行
复制
var timeRanges = [
  { start: "06:00", stop: "06:30" },
  { start: "12:30", stop: "13:00" },
  { start: "23:45", stop: "00:15" }
]

function isTimeInRange(time) {
  for (var i = 0; i < timeRanges.length; i++) {
    var range = timeRanges[i]
    if ((time > range.start && time < range.stop)
      || (range.start > range.stop && (time > range.start || time < range.stop))) {
      return true
    }
  }
  return false
}

但是,无论是否使用arrow functions,您都可以使用array .some() method使代码更简洁

代码语言:javascript
运行
复制
var timeRanges = [
  { start: "06:00", stop: "06:30" },
  { start: "12:30", stop: "13:00" },
  { start: "23:45", stop: "00:15" }
]

function isTimeInRange(time) {
  return timeRanges.some(range =>
    (time > range.start && time < range.stop)
    || (range.start > range.stop && (time > range.start || time < range.stop))
  )
}

function pad(d) {
  return ("0" + d).slice(-2)
}

function getCurrentTime() {
  var now = new Date()
  return pad(now.getHours()) + ":" + pad(now.getMinutes())
}

console.log("Current time in range? " + isTimeInRange(getCurrentTime()))
// test some other times
console.log(isTimeInRange("06:15")) // true
console.log(isTimeInRange("12:35")) // true
console.log(isTimeInRange("13:30")) // false
console.log(isTimeInRange("23:50")) // true
console.log(isTimeInRange("00:14")) // true

显然,如果需要,您可以将<>更改为<=>=

票数 0
EN

Stack Overflow用户

发布于 2017-06-16 12:53:25

试试看

代码语言:javascript
运行
复制
start = "10:10";
end = "16:30";
function isInRange(start, end, current){
  start = convertTimeToMinute(start);
  end = convertTimeToMinute(end);
  current = convertTimeToMinute(current);
  return start <= current && current <= end;
}
function convertTimeToMinute(time){
  return +time.slice(0,1)*60 + +time.slice(3,4);
}

console.log(isInRange(start,end, "15:20"));
console.log(isInRange(start,end, "20:20"));

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44580650

复制
相关文章

相似问题

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