@killwayne

Как реализовать диапазон времени в moment.js?

Начальное время: 17: 45
Конечное: 20:00
Нужно сделать диапазон с шагом в 30 минут от начального до конечного времени
Как это реализовать?
Никак не могу придумать, как сделать(
  • Вопрос задан
  • 319 просмотров
Решения вопроса 1
potapchino
@potapchino
function getTimestamps(from, to, step) {
  function f(timestamps, current) {
    return current.isBefore(to)
      ? f([...timestamps, current.clone()], current.add(step, 'minutes'))
      : [...timestamps, to.clone()];
  }
  
  return f([], from)
}


const timestamps = getTimestamps(
  moment('1745', 'hmm'),
  moment('2000', 'hmm'),
  30
);

console.log(
  timestamps
    .map(t => t.format('HH:mm'))
    .toString()
) // 17:45,18:15,18:45,19:15,19:45,20:00
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@dGololobov
начинающий
Напишите результат, который вы хотите увидеть.
Я пока понял так, что вам нужно увидеть это:
17:45, 18:15, 18:45, 19:15, 19:45, 20:00

Верно?
UPD.
Не проверял, но должно работать
const timePoints = (start, end, period = 30) => {
  const iter = (current, acc) => {
    if (moment(current).diff(moment(end), "minutes") > 0) {
      acc[acc.length] = end;
      return acc;
    }
    return iter(moment(current).add(period, "minutes"),  acc[acc.length] = current)
  }
  return iter(start, [])
}

const mytimePoints = timePoints('17:45', '20:00', 30)
console.log(mytimePoints)
Ответ написан
@Stavanger
Software Developer
Есть плагин, делает именно то, что вам надо.

https://github.com/rotaready/moment-range
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы