我有开始时间和结束时间,但开始时间大于结束时间
我想检查我输入的时间是否在开始时间和结束时间之间
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但是当我开始使用moment js进行比较时,结果变成了false。实际上,我首先比较开始和结束时间(如果startTime isBefore 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?
这是我的小提琴-> http://jsfiddle.net/aSc4R/221/
发布于 2018-02-05 07:21:46
问题是,您的endTime有时是第二天,而您必须在此基础上再添加一天。但在这种情况下,您还必须检查您的inputTime是否在午夜和endTime之间,如果是,也要在inputTime中添加一天。
下面是一些代码,这些代码在午夜之前、午夜和午夜之后测试时间,并检查和调整了条件。所有三个测试时间现在都有效。
下面是一个有效的JSFiddle - http://jsfiddle.net/joewilson/174exdnu/
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
})https://stackoverflow.com/questions/48604887
复制相似问题