Странный результат при использовании момента внутри цикла - PullRequest
1 голос
/ 09 марта 2020

Я пытаюсь использовать момент внутри al oop, чтобы определить, сколько 60-минутных временных интервалов существует между двумя датами, но я получил странный результат.

const timeSlots: Moment[] = [];

let startDate = moment('2020-03-09 11:00');
let endDate = moment('2020-03-09 12:30');

while (endDate.diff(startDate, 'minutes') >= 60) {
  timeSlots.push(startDate.clone());
  startDate.add(30, 'minutes');
}

console.log(timeSlots);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

Результат:

2020-03-09 11:00
2020-03-09 11:00

Ожидается:

2020-03-09 11:00
2020-03-09 11:30

Странно, фрагмент кода работает, но на моем компьютер или https://playcode.io/ это не

1 Ответ

0 голосов
/ 09 марта 2020

Обходной путь может быть рассчитан с отметкой времени unix. Один час имеет 3600 секунд = 3600000 миллисекунд:

const timeSlots = [];

let startDate = moment.utc('2020-03-09 11:00').valueOf();
let endDate = moment.utc('2020-03-09 14:30').valueOf();
while ((endDate-startDate) >= 3600000) {
      timeSlots.push(moment.utc(startDate));
      startDate += 3600000;
}

console.log(timeSlots.map(slot => slot.toString()));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

ОБНОВЛЕНИЕ:

После некоторого исследования кажется, что утверждение console.log(timeSlots) является проблемой. Это регистрирует некоторые внутренние свойства, которые нам не нужны. Кажется, это работает как ожидалось, если мы используем:

const timeSlots = [];

let startDate = moment('2020-03-09 11:00');
let endDate = moment('2020-03-09 12:30');

while (endDate.diff(startDate, 'minutes') >= 60) {
  timeSlots.push(startDate.clone());
  startDate.add(30, 'minutes');
}

console.log(timeSlots.map(slot => slot.format()));
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
...