Функция заполнения дат между двумя датами

1 минута чтения

Если контент не отображается, включите VPN.

Листинг fillRangeTimes.js

/**
 * Например если есть "2016-05-01" и "2016-05-03" то автоматически создаются
 * ["2016-05-01", "2016-05-02", "2016-05-03"]
 *
 * @desc Эта функция заполняет датами пустоты во времени
 * @param from {String|Date}
 * @param until {String|Date}
 * @return {Array}
 * @link https://gist.github.com/qertis/c1ed54a5f7cbaa9709030c0ff14d5b9e
 * @example fillRangeTimes('2015-01-01', "2016-03-02");
 */
function fillRangeTimes(from, until) {
  function getDifferenceDays(fromDate, untilDate) {
    const _MS_PER_DAY = 1000 * 60 * 60 * 24;
    const differenceDays = Math.floor((untilDate - fromDate) / (_MS_PER_DAY));

    if (differenceDays < 0) {
      throw new Error('until less from');
    }

    return differenceDays;
  }

  function isDate() {
    return (from instanceof Date || typeof from === 'string') &&
      (until instanceof Date || typeof until === 'string');
  }

  if (!isDate()) {
    throw new Error('unknown param type');
  }

  const result = [];
  const fromDate = new Date(from);
  const untilDate = new Date(until);
  const dayOffLength = getDifferenceDays(fromDate, untilDate);

  for (let i = 0; i < dayOffLength; i++) {
    const date = new Date(fromDate);
    date.setDate(fromDate.getDate() + i);
    fromDate.setHours(0);
    fromDate.setMinutes(0);
    fromDate.setMinutes(0);

    result.push(date);
  }

  result.push(untilDate);

  return result;
}

Пример запуска

fillRangeTimes('2015-01-01', '2016-03-02');

Приглашаю к общению в комментариях!

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии
Предыдущая статья

Как скомпилировать Handlebars без jQuery

Следующая статья

Посмотрел Google IO 2016