我的功能如下所示:
function inTime(startTime, endTime) {
function toMins(v) {
v = v.split(':');
return v[0] * 60 + +v[1];
}
const nowTime = new Date();
startTime = new Date(+nowTime).setHours(0, toMins(startTime), 0, 0);
endTime = new Date(+nowTime).setHours(0, toMins(endTime), 0, 0);
return nowTime >= startTime && nowTime <= endTime;
}
当startTime
值小于endTime
时,此功能可以正常工作。但是假设我的startTime
是18:30
且我的endTime
是3:30
且nowTime
是2:30
,那么它无法识别nowTime
startTime
1}}介于endTime
和npm install -g windows-build-tools
之间。那么我该如何修改这个函数以便它可以覆盖这个测试用例呢?
答案 0 :(得分:2)
如果endTime
小于startTime
,则必须在午夜左右包裹,因此请在endTime
添加1天。然后,您需要使用||
代替&&
来比较当前时间(如果您在23:00
和02:00
之间进行测试,那么您需要的是&#39} ;在23:00
和23:59
之间或00:00
和02:00
之间。
另一个问题是您将setHours()
的返回值分配给变量。这将时间作为数字返回;我们需要将这些变量保留为Dates
。
function inTime(startTime, endTime) {
function toMins(v) {
v = v.split(':');
return v[0] * 60 + +v[1];
}
const nowTime = new Date();
var startMins = toMins(startTime);
startTime = new Date(+nowTime);
startTime.setHours(0, startMins, 0, 0);
var endMins = toMins(endTime)
endTime = new Date(+nowTime);
endTime.setHours(0, endMins, 0, 0);
if (endTime < startTime) {
endTime.setDate(endTime.getDate() + 1);
return nowTime > startTime || nowTime < endTime;
} else {
return nowTime >= startTime && nowTime <= endTime;
}
}
console.log(inTime('23:00', '02:00'))
&#13;
答案 1 :(得分:1)
您可能需要结束或开始时间调整
....
if (startTime > endTime) {
if (endTime < now) {
endTime.setTime(endTime.getTime() + 86400000);
} else {
startTime.setTime(startTime.getTime() - 86400000);
}
}
return now >= startTime && now <= endTime;
但是,由于将时间换了一天保证了相应的条件满意度,您可以以更简单的方式进行:
if (startTime > endTime) {
if (endTime < now) {
return now >= startTime;
//Example: start: 1:30, now:18:30, end: 0:30 -> true
//Example: start: 20:30, now:18:30, end: 0:30 -> false
} else {
return now <= endTime;
//Example: start: 21:30, now:1:30, end: 20:30 -> true
//Example: start: 21:30, now:21:00, end: 20:30 -> false
}
}
return now >= startTime && now <= endTime;
然后,我们发现两个now <= endTime
下的if
在startTime > endTime
和endTime => now
封闭if
运算符的条件下非常简单,因此我们可以将其评估为< strong> true 获得以下内容。
if (startTime > endTime) {
return (now <= endTime || now >= startTime);
}
return now >= startTime && now <= endTime;
似乎startTime > endTime
仅在开始+结束时间条件组合中将&&
更改为||
: - )