Каждые 3 и 6 месяцев повторения на позже.js с определенной датой - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь создать повторение каждые 3 и 6 месяцев, используя Later.js (https://github.com/bunkat/later).

Это мой код

// My value.scheduled_date is 2018-09-06
var d = new Date(value.scheduled_date);
var day = d.getDate();
// month count will be -1 as it starts from 0
var month = d.getMonth();
var year = d.getFullYear();

var recurSched = later.parse.recur().on(day).dayOfMonth().every(3).month();
var schedules = later.schedule(recurSched).next(5);
console.log(schedules)

Это дает 3-месячное повторение, начиная стекущий месяц, но я хочу, чтобы повторение начиналось с schedule_date. Когда я добавляю запуск On к коду

var recurSched = later.parse.recur().on(day).dayOfMonth().every(3).month().startingOn(month + 1);
var schedules = later.schedule(recurSched).next(5);
console.log(schedules)

Повторение начинается только после этого месяца для каждого года. Я хочу, чтобы повторение начиналось с определенногодата, чтобы повторение других лет не было затронуто.

То же самое относится и к моему 6-месячному коду

var recurSched = later.parse.recur().on(day).dayOfMonth().every(6).month().startingOn(month+1);
var schedules = later.schedule(recurSched).next(5);
console.log(schedules);

Ответы [ 2 ]

0 голосов
/ 28 июня 2018

Сначала я вычислил месяцы в году, которые могут иметь напоминания, а затем создал крон для того количества лет, которое требуется.Например;если мы создаем ежеквартальное напоминание 01 января 1998 года, оно будет повторяться в апреле, июле, октябре и январе. Код выше приведен ниже

var recurSched = "";
var next_scheduled_date = "";
var next_scheduled_day = "";
var next_scheduled_month = "";
var next_scheduled_year = "";
var list_of_months = [];
for (var i = 1; i <= 2; i++) {
    var next_scheduled_date = new Date(value.scheduled_date);
    next_scheduled_date = new Date(next_scheduled_date.setMonth(next_scheduled_date.getMonth() + parseInt(i*6)));
    var next_scheduled_day = next_scheduled_date.getDate();
    var next_scheduled_month = next_scheduled_date.getMonth();
    var next_scheduled_year = next_scheduled_date.getFullYear();
    list_of_months.push(parseInt(next_scheduled_month + 1))
};
list_of_months.sort(function(a, b){return a - b});

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

var recurSched = later.parse.recur().on(list_of_months[0],list_of_months[1]).month().on(day).dayOfMonth();
var schedules = later.schedule(recurSched).next(4);
0 голосов
/ 06 июня 2018

Если вы хотите запускать повторяющиеся функции независимо и эффективно, лучше используйте планировщик вашей системы, т. Е. В Linux есть crontab. Здесь вы можете сослаться на crontab .Также вы можете обратиться к crontab guru для нескольких шаблонов.Пример:

0 9 * 3,6,9,12 * node script.js

Это запустит ваш script.js в 09:00 в марте, июне, сентябре и декабре. ”

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...