Несколько месяцев назад я опубликовал плагин к 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/
Добавить комментарий