Ruby - 获取从给定日期算起的过去 x 个月

Rub*_*oli 1 ruby datetime ruby-on-rails date

我如何获取从给予日期算起过去 x 个月的信息?

例如,如果日期是2023-01-04,并且我想要过去 3 个月(包括当前日期),它会给我一个array:

[
'2023-01-01',
'2022-12-01',
'2022-11-01'
]
Run Code Online (Sandbox Code Playgroud)

我尝试过:

current_month = Date.today.month
3.downto(1).map { |n| Date.parse(DateTime::MONTHNAMES.drop(1)[(current_month - n) % 12]).strftime('%Y-%m-%d') }
Run Code Online (Sandbox Code Playgroud)

当一年还没有结束时,它工作得很好,它只给出当年的月份,而对于新的一年,它输出完全错误的日期。

PS:我见过一些解决方案,但没有任何效果

Bea*_*ech 7

您可以使用类似的方法beginning_of_month,并且 Rails 可以轻松处理简单的日期数学:

编辑:使用OP的原始形式:

2.downto(0).map {|i| Date.today.beginning_of_month - (i).months}
Run Code Online (Sandbox Code Playgroud)

正如塔德曼指出的那样,这更干净。他们只需在代码中的其他地方将“我想要三个月”= 3 - 1 的逻辑转变为 0 即可。

my_dates = (1..3).map {|i| Date.today.beginning_of_month - (i - 1).months}

#=> [Sun, 01 Jan 2023, Thu, 01 Dec 2022, Tue, 01 Nov 2022]
Run Code Online (Sandbox Code Playgroud)

该输出看起来很奇怪,因为控制台显示日期对象,因此它们的颜色应该与方括号和日期之间的逗号不同。