2011-11-07 63 views
5

剛剛接觸ruby,並且遇到一些日期函數的問題。我正在嘗試將日曆月添加到提供的日期,以便「2002年4月30日」將輸出「2002年5月31日」。這裏是我的代碼紅寶石添加日曆月

date = '30th Apr 2002' 
parseDate = Date.parse(date) 

(parseDate >> 1) # This returns 2002-05-30 

也許這就是功能不如何工作的,在這種情況下,我需要編寫一些代碼,返回下個月的最後一天,如果提供的日期是最後一個一個月中的哪一天?

任何幫助,將不勝感激謝謝。

+0

那麼爲了得到2002年5月30日你需要增加一個月嗎?如果我被要求在4月30日之後的一個日曆月的日期,我會說5月30日... –

+0

是的,這是我期望的邏輯,但是我的要求規定,提醒電子郵件應該在截止日期。如果截止日期是5月31日,則應在4月30日發送提醒電子郵件 – namtax

+0

因此,這不是*添加*日曆月 - 這是*減去*日曆月,這是非常不同的。 –

回答

0

用的ActiveSupport

parseDate = parseDate + 1.month.since(parseDate) 

或30天準確,所以它可能會滑了一下

parseDate = parseDate + (30*24*60*60) 
+0

嗨,我想也許我的問題不是100%清楚。無論如何,Jon Skeet幫助過我,感謝您的幫助。謝謝 – namtax

4

>>不只是增加的一個月,並保持在一個月內的同一天,其作爲Skeet在評論中指出有點合理......

但是爲了獲得您想要的行爲,您可以按照正確的順序加上和減去一天,以便跨過最後一天本月邊界和背部:

((parseDate +1) >> 1) - 1 

減去個月,因爲它從你真正想要的評論顯示,使用同樣的伎倆,但反向操作一個月。

((parseDate +1) << 1) - 1 
+0

這只是在我提供的邊緣情況下工作嗎?或者所有月份?謝謝 – namtax

+0

是的,你提供的情況下,因爲我在irb驗證。我認爲沒有任何理由,它一般不會工作。 –

+0

將不適用於二月份,因爲第28或第29 + 1將不會推出到下個月 - 其餘的月份應該工作正常。 –