Позднее пользовательский период времени
Я использую позже, чтобы определить пользовательский период времени, чтобы работать в часы торговли на Форекс. Тем не менее, мой пользовательский период, кажется, запланирован, чтобы работать даже вне определенного периода. Я пытался искать в Интернете примеры, но, похоже, не так много, связанных с этой библиотекой. Я также посмотрел на nodecron, но синтаксис cron, похоже, не соответствовал моему требованию: запускать каждый час задачу с X AM в понедельник до Y PM в пятницу. Вот мой код планировщика:
later.forexWeek = {
name: 'forex trading hours',
range: later.h.range * 119,
val: function(d) {
return 0;
},
isValid: function(d, val) {
return later.forexWeek.val(d) === val;
},
extent: function(d) { return [0, 1]; },
start: function(d) {
return later.date.next(
later.Y.val(d), later.M.val(d), later.dw.val(1), 21
);
},
end: function(d) {
return later.date.prev(
later.Y.val(d), later.M.val(d), later.dw.val(6), 20
);
},
next: function(d, val) {
return later.date.next(
later.Y.val(d), later.M.val(d), later.D.val(d), later.H.val(d)
);
},
prev: function(d, val) {
return later.date.prev(
later.Y.val(d), later.M.val(d), later.D.val(d), later.H.val(d)
);
}
};
var forexWeek = later.parse.recur().every().hour().on(0).customPeriod('forexWeek');
later.setInterval(function() {
console.log(moment().format());
}, forexWeek);
Любая помощь приветствуется!
1 ответ
Вам не нужно писать специальный период времени для этого типа расписания, Laterjs
поддерживает это напрямую. Например, если вы хотите запускать что-либо каждый час с 8:00 в понедельник до 17:00 в пятницу, вы должны выполнить следующую процедуру для разработки расписания.
Поскольку в разные дни существуют разные ограничения, нам нужно создать составное расписание. Составной график - это, по сути, композиция различных наборов ограничений, которая делает конкретное вхождение допустимым, если любой из наборов ограничений является действительным. В этом случае у нас будет три разных набора ограничений:
1. Once every hour on the hour on Mondays after 8 AM
2. Once every hour on the hour on Tuesdays, Wednesdays, Thursdays
3. Once every hour on the hour on Fridays before and including 5PM
Так что теперь мы можем создать соответствующий график для каждого. поскольку Laterjs
расписания - это просто объекты JSON, я просто создаю расписание вручную, используя ограничения, определенные по адресу http://bunkat.github.io/later/time-periods.html. Тот же график может быть создан с использованием анализатора Recur.
Перевод графиков, которые мы определили ранее:
1. {dw: [2], h_a:[8], m:[0], s:[0]}
2. {dw: [3,4,5], m:[0], s:[0]}
3. {dw: [6], h_b:[18], m:[0], s:[0]}
Если мы возьмем первое и разобьем его, оно, в частности, говорит, что время должно считаться действительным, когда значение дня недели (dw) равно 2 (понедельник), когда значение часа больше или равно (h_a) 8, когда минутное значение (m) равно 0, и когда второе значение (я) равно 0. Любое время, которое отвечает всем этим ограничениям, будет возвращено этим расписанием. Это может быть более понятно, если мы посмотрим на пару примеров.
Mon Aug 11 2014 18:00:00 GMT-0700 (Pacific Daylight Time)
- Day of week is 2
- Hour is 18
- Minute is 0
- Second is 0
This is a valid time and would be returned.
Mon Aug 11 2014 7:00:00 GMT-0700 (Pacific Daylight Time)
- Day of week is 2
- Hour is 7
Hour is not valid, this time would not be returned.
О двух других можно рассуждать так же. Теперь все, что нам нужно сделать, - это поместить их в составной график, который, по сути, объединит их ИЛИ так, чтобы время, соответствующее любому из графиков, считалось действительным.
var s = {schedules: [
{dw: [2], h_a:[8], m:[0], s:[0]},
{dw: [3,4,5], m:[0], s:[0]},
{dw: [6], h_b:[18], m:[0], s:[0]}
]};
Теперь вы можете найти будущее (или прошлые события):
later.schedule(s).next(100)