Rails Time.now.end_of_month不计算闰年

时间:2013-03-31 15:11:31

标签: ruby-on-rails ruby ruby-on-rails-3

我正在尝试创建一个每月运行一次的循环,我注意到我的逻辑并没有考虑到闰年。

我试过了:

newDate = (Time.now.beginning_of_month.to_date - 2.months) + 3.years

newDate = (Time.now.to_date - 2.months).end_of_month + 3.year

他们都返回Sun, 28 Feb 2016

他们为什么不考虑闰年并于2月29日回归?

注意:这个问题是在2013年3月31日提出的,代码可能在另一天表现不同。

1 个答案:

答案 0 :(得分:3)

这是因为计算计算当前年度的月末,然后增加3年。

(Time.now.beginning_of_month.to_date - 1.month) = 28,2013年2月。再加上3年,2016年2月28日。

试试这个 -

((Time.now.beginning_of_month.to_date - 1.month) + 3.years).end_of_month
顺便说一句,减去2个月需要我到1月(这里仍然是3月31日)