红宝石时间,从现在到本月的第二个星期二之间的天/小时/分钟

时间:2014-03-05 20:46:36

标签: ruby-on-rails ruby

我正在使用ruby 2.0.0和rails 4.0.0。

我有一个网络服务电话,它将在每个月的1号开始运行。

它的工作是安排电子邮件在本月的第二个星期二结束。

“调度程序”Web服务调用具有如下参数:

?schedule_for_1d&1h&1m

这将安排电子邮件在执行api呼叫后的1天,1小时和1分钟内完成。

在我进行API调用之前,我需要计算“Time.now”和当月第二个星期二之间的时间,以天,小时和分钟为单位。

如何编写该代码并以上述“1d&1h&1m”的格式获取?

1 个答案:

答案 0 :(得分:0)

def scheduleSecondTuesday
  now = Time.now
  secondTuesday = 8 + (2-Time.local(now.year,now.month,1).wday) % 7
  s = Time.local(now.year,now.month,secondTuesday) - now
  dhm = [24*3600,3600,60].inject([]) { |a,b| x,s = s.divmod(b); a<<x }
  '?schedule_for_%dd&%dh&%dm' % dhm
end

scheduleSecondTuesday
# => "?schedule_for_5d&9h&48m"

此处包含的一个安全功能是,如果每个月1日运行的任务由于某种原因失败并在第二个星期二或月份之前运行一段时间,它仍会输出正确的字符串。