我的日期标记为重复日期(每年发生一次),此日期为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);
}
}
}
正确的方法是什么,如果明年的日期是......等等,那么该怎么做?
答案 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...
}