Считаем рабочие дни с Moment.js

от автора

Несколько месяцев назад я опубликовал плагин к Moment.js позволяющий рассчитать: сколько это N рабочих дней от сегодня в календарных днях? какая дата будет спустя N рабочих дней от заданной даты? сколько рабочих дней в заданном диапазоне? Возможность сконфигурировать рабочие дни и исключения в виде праздников — имеется.

Плагин можно найти на github: https://github.com/andruhon/moment-weekday-calc

Плагин можно установить через bower и npm:

bower install moment-weekday-calc 

npm install moment-weekday-calc 

Плагин добавляет несколько функций в Moment.js:

  • int weekdayCalc — считает сколько «рабочих» дней в заданном диапазоне
  • date addWorkdays — находит дату спустя N «рабочих» (пн-пт) дней
  • int workdaysToCalendarDays — конвертирует рабочие дни в календарные
  • date addWeekdaysFromSet — добавляет дни из заданного множества к заданной дате
  • int weekdaysFromSetToCalendarDays — конвертирует дни из заданного множетсва в календартные дни

Каждая из функций доступна с префиксом iso, такие функции используют множество рабочих дней начинающееся с понедельника (1-7), функции без префикса используют американский формат начинающийся с воскресенья (0-8).

Существует множество вариантов вызова этих функций, как с перечнем аргументов, так и с объектом с именованными параметрами, не буду их перечислять, а сразу перейду к примерам.

Использование:
Привожу примеры только для функций с префиксом iso.

Сколько пятниц между 14 и 23 февраля?
moment('14 Feb 2014').isoWeekdayCalc('23 Feb 2014',[5]); //2
(в данном случае начальный диапазон берётся из объекта moment, из которого мы вызываем функцию)

Сколько рабочих дней, без учёта праздников в с 1 апреля 2015 года по 31 марта 2016?

moment().isoWeekdayCalc('1 Apr 2015','31 Mar 2016',[1,2,3,4,5]); //262   

(здесь объект moment не содержит даты, поэтому дата задаётся в качестве первого аргумента)

А если учесть пару праздников?
moment().isoWeekdayCalc('1 Apr 2015','31 Mar 2016',[1,2,3,4,5],['6 Apr 2015','7 Apr 2015']); //260

Вызов с объектом:

moment().weekdayCalc({     rangeStart: '1 Apr 2015',     rangeEnd: '31 Mar 2016',     weekdays: [1,2,3,4,5],     exclusions: ['6 Apr 2015','7 Apr 2015']   }) //260 

Что за дата будет спустя 5 рабочих дней после 2 февраля?
moment('2015-02-02').isoAddWeekdaysFromSet(5, [1,2,3,4,5,7]); //2015-02-08

5 рабочих дней после 4 мая, с учётом 9го мая?

moment('2015-05-04').isoAddWeekdaysFromSet({     'workdays': 5,     'weekdays': [1,2,3,4,5,6],     'exclusions': ['2015-05-09']   }); //2015-05-11  

11 рабочих дней после 10 октября в календарных днях, рабочие дни — среда-воскресенье:

moment('2015-10-05').isoWeekdaysFromSetToCalendarDays(11, [3,4,5,6,7], ['2015-10-15']) //17 

Подробнее в README на гитхабе.

Заранее спасибо за здравую критику. Надеюсь, что плагин будет кому-нибудь полезен.

ссылка на оригинал статьи http://habrahabr.ru/post/267283/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *