【问题标题】:laterjs custom time periodlaterjs自定义时间段
【发布时间】:2014-08-07 16:39:23
【问题描述】:

我正在使用 laterjs 定义在外汇交易时间内运行的自定义时间段。但是,我的自定义期间似乎计划在定义的期间之外运行。我尝试在网上搜索示例,但似乎与该库相关的内容并不多。我也看过 nodecron,但 cron 语法似乎不支持我的要求,即从周一的上午到周五的下午,每小时运行一次任务。这是我的调度程序代码:

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);

任何帮助将不胜感激!

【问题讨论】:

    标签: cron laterjs


    【解决方案1】:

    你真的不需要为这种类型的时间表编写自定义时间段,Laterjs 直接支持它。例如,如果您想从周一上午 8 点到周五下午 5 点每小时运行一次,您将通过以下流程来制定时间表。

    由于在不同的日子有不同的限制,我们需要创建一个综合时间表。复合调度基本上是不同约束集的组合,如果任何约束集有效,则使特定事件有效。在这种情况下,我们将拥有三组不同的约束:

     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#overview 中定义的约束手动创建计划。使用 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 时,并且当第二值 (s) 等于 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)
    

    【讨论】:

      猜你喜欢
      • 2016-06-23
      • 2015-12-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-22
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多