2014-03-05 66 views
0

我使用Ruby 2.0.0的導軌4.0.0的第二個星期二之間。紅寶石時間天/小時/分鐘,現在和一個月

我有一個網絡服務電話,將在每個月的第一天運行。

它的工作是安排電子郵件在本月的第二個星期二外出。

的「計劃」 Web服務調用有這樣的參數:

?schedule_for_1d&1h&1m

這將安排電子郵件執行API調用出去後1天,1小時,1分鐘。

就在我進行API調用之前,我需要計算「Time.now」與每個月的第二個星期二之間的天數,小時數和分鐘數。

我該如何寫出代碼並以上述「1d&1h&1m」的格式獲取?

+0

我不明白的參數值。 '1d&1h'等於'25h'嗎?如果是週日晚上10點,電子郵件將在星期二凌晨3點出去,那它是'1d&5h'還是'2d&3h'? – Phrogz

+0

'1d&1h'相當於'25h'。 – Luigi

+0

我正在構建[Tick](http://tickapp.herokuapp.com/),以避免開發人員再次遇到調度程序問題。 – Siscia

回答

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日運行任務由於某種原因失敗,並運行的第二個星期二或一個月,它仍將輸出正確的字符串之前的一段時間。