使用具有重复日期的momentjs

时间:2015-12-08 16:15:37

标签: javascript date momentjs recurring

我的日期标记为重复日期(每年发生一次),此日期为2014年4月1日,从2014年开始此事件将每年发生。

我有一份每周运行的工作,在这项工作中我插入将在未来180天内发生的数据库事件,仅从今天开始,其他事件将被丢弃。

现在,在我的支票上,2016年4月1日已经过去....所以它被丢弃了(2015年4月1日应该加入,因为它在范围内)。

我正在使用momentjs,但无法为其找到正确的逻辑。

下面是我的代码......

//desiredDate = today + 180 days

if (isYearlyRecur) {
    var year = eventeDate.getFullYear();
    if (year < currentYear) {
        if (moment(eventeDate).unix() < moment(todayDate).unix()) {
            eventeDate = moment(eventeDate).set('year', currentYear + 1);
        }
        else if (moment(eventeDate).unix() > moment(desiredDate).unix()) {
            eventeDate = moment(eventeDate).set('year', currentYear);
        }
    }
}

正确的方法是什么,如果明年的日期是......等等,那么该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以为此使用rSchedule(我维护的javascript递归库)。

示例:

  

我有一个标记为重复日期的日期(每年发生),该日期是2014年4月1日,从2014年开始,此事件每年都会发生。

import { Schedule } from '@rschedule/rschedule';
import { MomentDateAdapter } from '@rschedule/moment-date-adapter';
import * as moment from 'moment';

const schedule = new Schedule({
  rrules: [{
    frequency: 'YEARLY',
    start: moment([2014, 3, 1]),
  }],
  dateAdapter: MomentDateAdapter,
});
  

我有一个每周运行的作业,在此作业中,我插入了从今天开始仅在未来180天内会发生的数据库事件,其他事件将被丢弃。

const next180Days = moment().add(180, 'days').endOf('day');

if (schedule.occursBetween(moment(), next180Days)) {
  // do stuff...
}