Момент js: неожиданное поведение при использовании метода inBetween - PullRequest
0 голосов
/ 13 октября 2018

Я ожидаю, что текущее время Saturday, October 13, 2018 9:32 PM будет между Saturday, October 13, 2018 9:00 PM и Sunday, 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 голосов
/ 13 октября 2018

Я изменил (клонировал) 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().Посмотрите, поможет ли это.

...