时刻js比较时间与日期之间

时间:2018-02-04 05:03:42

标签: momentjs

我有一个开始和结束时间,但开始时间大于结束时间

我想检查输入的时间是否在开始和结束时间之间

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介于startTimeendTime之间,没有日期干预。

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进行比较时,结果变为错误。事实上,我首先比较开始时间和结束时间(如果startTimeendTime之前,我们必须在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/

1 个答案:

答案 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