Moment JS:使用inBetween方法的意外行为

时间:2018-10-13 00:52:01

标签: node.js momentjs

我希望当前时间Saturday, October 13, 2018 9:32 PM介于Saturday, October 13, 2018 9:00 PMSunday, October 14, 2018 12:00 AM之间,但是js表示不是。知道这怎么可能吗?

var currentTime = moment();
console.log("moment(): ", moment().format('LLLL'))
console.log("currentTime: ", currentTime.format('LLLL'))
var start_time = moment(currentTime.format('YYYY-MM-DD') + ' ' + '21:00:00');
var currentTimePlusDay = currentTime.add(1,'days');
var extra = currentTimePlusDay.format('YYYY-MM-DD') + ' ';
var end_time = moment(extra + '00:00:00');

console.log("start_time: ", start_time.format('LLLL'))
console.log("end_time: ", end_time.format('LLLL'))
var midnight;
console.log("moment(currentTime).isBetween(start_time, end_time): ", moment(currentTime).isBetween(start_time, end_time))

使用时区:America/New_York,输出:

moment():  Saturday, October 13, 2018 9:32 PM
currentTime:  Saturday, October 13, 2018 9:32 PM
start_time:  Saturday, October 13, 2018 9:00 PM
end_time:  Sunday, October 14, 2018 12:00 AM
moment(currentTime).isBetween(start_time, end_time):  false

1 个答案:

答案 0 :(得分:2)

我在您的作业中将currentTime更改(克隆)为currentTimePlusDay为:

var currentTime = moment();
console.log("moment(): ", moment().format('LLLL'))
console.log("currentTime: ", currentTime.format('LLLL'))
var start_time = moment(currentTime.format('YYYY-MM-DD'));
var currentTimePlusDay = currentTime.clone().add(1,'days');  // <--- THIS
var extra = currentTimePlusDay.format('YYYY-MM-DD') + ' ';
var end_time = moment(extra + '00:00:00');

console.log("start_time: ", start_time.format('LLLL'))
console.log("end_time: ", end_time.format('LLLL'))
console.log("currenttime: ", currentTime.format('LLLL'))
console.log("moment(currentTime).isBetween(start_time, end_time): ", moment(currentTime).isBetween(start_time, end_time))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.js"></script>

如果您当天不这样做,那么最终添加的currentTime会发生变化,从而使您的范围介于两者之间。

还更改了开始时间,使其不从21:00:00开始,以确保其有效。但是clone()的变化是不同的。看看是否有帮助。