0

在我的 Rails 4 应用程序中,我从用户那里收到了一个月和一年的时间,我想把它变成一个日期。新日期应该是下个月的 1 日,但我不确定解决这个问题的最佳方法。

目前我有

expiry = Date.new(params[:expYear],params[:expMonth].to_i + 1,1)

但这并不理想,因为如果有人输入 12 作为月份,我的方法将使月份 13 当然不存在(而且年份也不会更新)。

有什么有用的功能可以在这里提供帮助吗?

4

5 回答 5

1

你可以这样做:

year,month = params[:expYear].to_i,params[:expMonth].to_i

Date.new(year,month) + 1.month

或使用@dax 所写的end_of_month

Date.new(year,month).end_of_month + 1.day

这将解决您的问题

于 2013-10-06T15:18:30.140 回答
1

我认为这会更简单

expiry = Date.new(params[:expYear],params[:expMonth].to_i).next_month
于 2013-10-07T05:42:26.023 回答
0

做类似的事情

Time.zone.local(params[:expYear].to_i, params[:expMonth].to_i, 1, 0, 0, 0)
于 2013-10-08T01:04:28.830 回答
0

我用这个解决了它 - 在你回答 user2503775 之前很抱歉

expiry = Date.new(params[:expYear].to_i,params[:expMonth].to_i) + 1.month

注意您必须先转换为整数才能完成此操作。我还发现,如果省略了 day 参数,它无论如何都默认为 1,所以这很方便

于 2013-10-06T15:20:56.443 回答
0

我会做类似的事情

Date.new(params[:expYear].to_i,params[:expMonth].to_i,1).advance(months: 1)
于 2013-10-06T15:21:45.537 回答