Moment.js检查日期时间是否在一组日期和时间之间

时间:2016-11-16 15:59:23

标签: momentjs

提前感谢...我刚接触使用Moment,并且在下面的代码中不确定为什么检查isBetween为真。我看到日期部分在给定日期之间,但时间不是。不确定我是否正确使用该命令。

var beginningTime = moment('2016-11-25 3:45 am', 'YYYY-MM-DD h:mma');
var endTime1 = moment('2016-11-22 9:00 am', 'YYYY-MM-DD h:mma');
var endTime2 = moment('2016-11-30 1:00 pm', 'YYYY-MM-DD h:mma');
console.log("Beg Time = "+beginningTime.toString());
console.log("End Time1 = " +endTime1.toString());
console.log("End Time2 = "+endTime2.toString());
console.log(beginningTime.isBetween(endTime1,endTime2));

VM5431:4 Beg Time = Fri Nov 25 2016 03:45:00 GMT-0500
VM5431:5 End Time1 = Tue Nov 22 2016 09:00:00 GMT-0500
VM5431:6 End Time2 = Wed Nov 30 2016 13:00:00 GMT-0500
VM5431:7 true

1 个答案:

答案 0 :(得分:7)

正如文档所说,isBetween

  

检查片刻是否在两个其他时刻之间,可选择查看单位比例(分钟,小时,天等)。比赛是独家的

比较考虑了完整的对象(包括日期和时间信息),因此您的示例的结果是正确的(2016-11-25 3:45 am 介于 2016-11-22 9:00 am和{{1 }})。

如果您只想比较时间,那么您的时刻对象应具有相同的日期值(日,月,年)。实现这一目标的一种方法是,从您的时刻(2016-11-30 1:00 pmbeginningTimeendTime1)开始,使用moment({unit: value, ...})构造函数。仅设置endTime2hour属性,它将为当天创建一个时刻对象。

hour()minute()可以获得给定时刻的小时和分钟。

这是一个工作示例:

minute
var beginningTime = moment('2016-11-25 3:45 am', 'YYYY-MM-DD h:mm a');
var endTime1 = moment('2016-11-22 9:00 am', 'YYYY-MM-DD h:mm a');
var endTime2 = moment('2016-11-30 1:00 pm', 'YYYY-MM-DD h:mm a');
console.log("Beg Time = "+beginningTime.toString());
console.log("End Time1 = " +endTime1.toString());
console.log("End Time2 = "+endTime2.toString());
console.log(beginningTime.isBetween(endTime1,endTime2));

// Create a moment object considering only hour and minute
function getMomentTime(m){
  return moment({hour: m.hour(), minute: m.minute()});
};

var t1 = getMomentTime(endTime1);
var t2 = getMomentTime(endTime2);
var begin = getMomentTime(beginningTime);

console.log("Beg Time = "+begin.toString());
console.log("End Time1 = " +t1.toString());
console.log("End Time2 = "+t2.toString());

console.log(begin.isBetween(t1, t2));