Как я могу использовать moment.js для добавления дней, кроме выходных? - PullRequest
0 голосов
/ 20 сентября 2018

Я устанавливаю дату наблюдения по умолчанию через два дня после текущей даты, которая в настоящее время работает:

const Notify = moment().add(2, 'days').toDate();

Однако я бы хотел исключить выходные.Поэтому я установил момент WeekDay , но я не могу заставить его работать с добавлением дней к текущей дате.Документация требует:

moment().weekday(0)

Но я не могу заставить это работать с добавлением через два дня вперед.Есть идеи?

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Вы также не можете использовать внешнюю библиотеку и выполнять простую функцию, например, одну из следующих:

const WEEKEND = [moment().day("Saturday").weekday(), moment().day("Sunday").weekday()]

const addBusinessDays1 = (date, daysToAdd) => {
  var daysAdded = 0,
    momentDate = moment(new Date(date));
  while (daysAdded < daysToAdd) {
    momentDate = momentDate.add(1, 'days');
    if (!WEEKEND.includes(momentDate.weekday())) {
      daysAdded++
    }
  }

  return momentDate;
}
console.log(addBusinessDays1(new Date(), 7).format('MM/DD/YYYY'))
console.log(addBusinessDays1('09-20-2018', 3).format('MM/DD/YYYY'))

// This is the somewhat faster version
const addBusinessDays2 = (date, days) => {
  var d = moment(new Date(date)).add(Math.floor(days / 5) * 7, 'd');
  var remaining = days % 5;
  while (remaining) {
    d.add(1, 'd');
    if (d.day() !== 0 && d.day() !== 6)
      remaining--;
  }
  return d;
};

console.log(addBusinessDays2(new Date(), 7).format('MM/DD/YYYY'))
console.log(addBusinessDays2('09-20-2018', 3).format('MM/DD/YYYY'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

Они немного изменены с этого поста , и я думаю, что это хорошая альтернатива внешней библиотеке, с которой вы должны иметь дело / иметь дело (при условииэто единственная часть, которая вам нужна, а не другие функции этой библиотеки).

0 голосов
/ 20 сентября 2018

Попробуйте: Момент-рабочие дни

Это должно помочь вам.

Пример:

var momentBusinessDays = require("moment-business-days")

momentBusinessDays('20-09-2018', 'DD-MM-YYYY').businessAdd(3)._d 

Результат:

Tue Sep 25 2018 00:00:00 GMT+0530 (IST)
...