【发布时间】:2019-10-23 17:02:07
【问题描述】:
我有一个带有start_date、end_date 的范围,我想在整个范围内获得每个月的同一天,所以从 1 月 30 日开始,我应该得到每个月的 30 日:
start_date = Date.new(2019, 1, 30)
end_date = Date.new(2019, 12, 30)
range = (start_date...end_date)
dates = range.step(30).map(&:to_date)
dates
#=> [Wed, 30 Jan 2019,
# Fri, 01 Mar 2019,
# Sun, 31 Mar 2019,
# Tue, 30 Apr 2019,
# Thu, 30 May 2019,
# Sat, 29 Jun 2019,
# Mon, 29 Jul 2019,
# Wed, 28 Aug 2019,
# Fri, 27 Sep 2019,
# Sun, 27 Oct 2019,
# Tue, 26 Nov 2019,
# Thu, 26 Dec 2019]
我在weeks 中使用了类似的东西,但是例如到了 2 月的几个月,它当然会失败,所以我必须调整到 28 日。
我知道我可以循环查看月份并根据start_date 进行调整,但这感觉是个坏主意。
【问题讨论】:
-
不幸的是,在您的示例中,
30既是月份中的日期,也是step的增量值。 -
顺便说一句,这不仅仅是二月。请注意,大多数其他日期也已关闭。您不能通过添加 30 天来逐月移动,因为 12 个月中只有 4 个月正好有 30 天。
标签: ruby-on-rails ruby