我有一个开始和结束时间,但开始时间大于结束时间
我想检查输入的时间是否在开始和结束时间之间
var startTime = moment('12:30 PM', 'h:mma');
var endTime = moment('1:00 AM', 'h:mma');
var inputtedTime = moment('12:00 AM', 'h:mma');
我们可以看到,inputtedTime
介于startTime
和endTime
之间,没有日期干预。
12:30 PM
01:30 PM
02:30 PM
......
10:30 PM
11:30 PM
12:00 AM // <---------
12:30 AM
01:30 AM
但是当我开始使用时刻js进行比较时,结果变为错误。事实上,我首先比较开始时间和结束时间(如果startTime
在endTime
之前,我们必须在endTime
添加1天
var isTimeValid = true;
if(startTime.isBefore(endTime) == false) {
endTime.add(1, "days");
}
isTimeValid = inputtedTime.isBetween(startTime, endTime);
console.log(isTimeValid); // false
我们如何将结果输出为true?
这是我的小提琴 - &gt; http://jsfiddle.net/aSc4R/221/
答案 0 :(得分:2)
问题是您的inputTime
有时是第二天,您必须在此添加一天。但在这种情况下,您还必须检查endTime
是否在午夜和inputTime
之间,如果是,请将一天添加到var testTimesThatShouldBeValid = ['11:59 PM', '12:00 AM', '12:01 AM'];
testTimesThatShouldBeValid.forEach(function(testTime) {
var isTimeValid = false;
var startTime = moment('12:30 PM', 'h:mma');
var midnight = moment('12:00 AM', 'h:mma');
var endTime = moment('1:00 AM', 'h:mma');
var inputtedTime = moment(testTime, 'h:mma');
if (endTime.isBefore(startTime)) {
if (inputtedTime.isBetween(midnight, endTime, null, '[]')) {
inputtedTime.add(1, 'days');
console.log("adjusted input time to next day");
}
endTime.add(1, 'days');
console.log("adjusted end time to next day");
}
console.log(inputtedTime.format());
console.log(startTime.format());
console.log(endTime.format());
isTimeValid = inputtedTime.isBetween(startTime, endTime);
console.log(isTimeValid); // between start and end
})
。
这里有一些代码,其中包含在午夜之前,之后和之后的测试时间,并检查和调整条件。所有三个测试时间现在都有效。
这是一个有效的JSFiddle - http://jsfiddle.net/joewilson/174exdnu/
T