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

时间:2017-06-16 04:08:21

标签: javascript

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

06:00-06:30

12:30-13:00

23:45-00:15

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

程序应检查指定的空闲时间范围与当前时间,以确定是否打开或关闭块模式。

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

逻辑也必须能够在23:00到0:00之间处理交叉。

无论如何,这是我的思路。感谢任何建议,包括采取不同路径的建议。

3 个答案:

答案 0 :(得分:0)

  

无论如何,这是我的思路。感谢任何建议,包括采取不同路径的建议。

如果您想检查当前时间是否在范围内,那么范围应该是DATE + TIME,因为当前时间是DATE + TIME

可能的解决方案

您可以将所有三个日期时间转换为时刻实例,然后使用

public static byte[] toByteArray(float value) {
    byte[] bytes = new byte[4];
    ByteBuffer.wrap(bytes).putFloat(value);
    return bytes;
}

public static float toFloat(byte[] bytes) {
    return ByteBuffer.wrap(bytes).getFloat();
}

start.isBefore(current) && current.isBefore(end) isBefore上的时刻文档:https://momentjs.com/

答案 1 :(得分:0)

  

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

你循环遍历数组并进行比较。我建议将范围存储为一个对象数组,其中每个范围都类似于station2

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

Date

但您可以使用array .some() method,无论有没有arrow functions,都可以使代码更整洁,更简洁:

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
}

显然,如果需要,您可以将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<更改为><=

答案 2 :(得分:0)

试试吧

&#13;
&#13;
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"));
&#13;
&#13;
&#13;