0

我正在使用momentjs插件moment-recur在客户端应用程序中创建和操作重复日期。我能够创建所有类型的重复日期(每天、每月、每年),但无法弄清楚如何为每月的第 N 天创建重复日期。即九月的第一个星期五。

我已经能够为该月的第 N 周生成一个重复日期,但对于从星期六开始的月份,当我需要它返回下周的星期五时,图书馆会跳到下一年。您可以看到 2012 年 9 月的第一个星期五是第 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'));

印刷

...“09/03/2010”、“09/02/2011”、“09/06/2013”​​、“09/05/2014”...跳过 2012

JSFiddle 示例

有谁知道如何使用 moment-recur 或任何其他 JS 库生成一个月的第 N 天的重复日期?

4

1 回答 1

1

使用https://github.com/jakubroztocil/rrule似乎很容易。请参阅https://jakubroztocil.github.io/rrule/进行测试:

  • 九月的第一个星期五是

    rule =  new RRule({ freq: RRule.YEARLY,
                        byweekday: RRule.FR,
                        bymonth: [9],
                        bysetpos: [1]
    })
    
于 2014-11-09T21:18:49.713 回答