对于用javascript编写的网站拦截/生产力应用程序,我希望用户输入一系列可用于空闲时间的时间范围(在他当地时间)。例如:
06:00-06:30
12:30-13:00
23:45-00:15
不需要24格式(我只是假设它会更容易)
程序应检查指定的空闲时间范围与当前时间,以确定是否打开或关闭块模式。
我的粗略想法是使用内置的Javascript函数来获取当前的DateTime,并在必要时将其转换为24小时格式。我认为时间范围将在一个数组中。我不确定如何检查当前日期是否在数组范围内。
逻辑也必须能够在23:00到0:00之间处理交叉。
无论如何,这是我的思路。感谢任何建议,包括采取不同路径的建议。
答案 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)
试试吧
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;