【问题标题】:Using momentjs with recurring dates使用带有重复日期的 momentjs
【发布时间】:2015-12-08 16:15:37
【问题描述】:

我有一个标记为重复日期(每年发生)的日期,这个日期是 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);
        }
    }
}

正确的做法是什么,如果日期在明年……等等

【问题讨论】:

标签: javascript date momentjs recurring


【解决方案1】:

您可以为此使用 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...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多