在我的 Rails 4 应用程序中,我从用户那里收到了一个月和一年的时间,我想把它变成一个日期。新日期应该是下个月的 1 日,但我不确定解决这个问题的最佳方法。
目前我有
expiry = Date.new(params[:expYear],params[:expMonth].to_i + 1,1)
但这并不理想,因为如果有人输入 12 作为月份,我的方法将使月份 13 当然不存在(而且年份也不会更新)。
有什么有用的功能可以在这里提供帮助吗?
在我的 Rails 4 应用程序中,我从用户那里收到了一个月和一年的时间,我想把它变成一个日期。新日期应该是下个月的 1 日,但我不确定解决这个问题的最佳方法。
目前我有
expiry = Date.new(params[:expYear],params[:expMonth].to_i + 1,1)
但这并不理想,因为如果有人输入 12 作为月份,我的方法将使月份 13 当然不存在(而且年份也不会更新)。
有什么有用的功能可以在这里提供帮助吗?
你可以这样做:
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
这将解决您的问题
我认为这会更简单
expiry = Date.new(params[:expYear],params[:expMonth].to_i).next_month
做类似的事情
Time.zone.local(params[:expYear].to_i, params[:expMonth].to_i, 1, 0, 0, 0)
我用这个解决了它 - 在你回答 user2503775 之前很抱歉
expiry = Date.new(params[:expYear].to_i,params[:expMonth].to_i) + 1.month
注意您必须先转换为整数才能完成此操作。我还发现,如果省略了 day 参数,它无论如何都默认为 1,所以这很方便
我会做类似的事情
Date.new(params[:expYear].to_i,params[:expMonth].to_i,1).advance(months: 1)