N-й день месяца

Я использую плагин momentjs moment-recur для создания и управления повторяющимися датами в клиентском приложении. Я могу создавать все типы повторяющихся дат (ежедневно, ежемесячно, ежегодно), но не могу понять, как создать повторяющуюся дату для N-го дня месяца. то есть 1-я пятница сентября.

Мне удалось создать повторяющуюся дату для N-й недели месяца, которая близка, но для месяцев, начинающихся в субботу, библиотека переходит к следующему году, когда мне нужно вернуть пятницу следующей недели. Вы можете видеть, что 1-я пятница сентября 2012 года является 7-м, но поскольку месяц начался неделей ранее в субботу, он определяет, что пятницы нет, используя следующий код:

var start, end;
start = '09/05/1986';
end = '09/05/2014';

var date = moment(start);

//date.day() == 5, which results in Friday
var occurence = date.recur(end).every(date.day()).dayOfWeek();

//date.monthWeek() == 1, 1st week of the month THIS is where the problem lies
occurence = occurence.every(date.monthWeek()).weekOfMonth();

//September
occurence = occurence.every(date.format("MMMM")).monthOfYear();

console.log(occurence.next(50, 'L'));

Отпечатки

..."03.09.2010", "02.09.2011", "06.09.2013", "05.09.2014"... пропускаем 2012

Пример JSFiddle

Кто-нибудь знает, как создавать повторяющиеся даты для N-го дня месяца с повторением момента или с любой другой библиотекой JS?


person Preston S    schedule 21.03.2014    source источник


Ответы (1)


Кажется, это легко с https://github.com/jakubroztocil/rrule. См. https://jakubroztocil.github.io/rrule/ для проверки:

  • Первая пятница сентября

    rule =  new RRule({ freq: RRule.YEARLY,
                        byweekday: RRule.FR,
                        bymonth: [9],
                        bysetpos: [1]
    })
    
person Dmitry Frenkel    schedule 09.11.2014
comment
Спасибо за это! Идеально соответствует моим потребностям и должен быть принятым ответом. - person Adrian Föder; 13.09.2017