如何创建特定月份的日期

我想生成一个特定月份的所有日期,从该月的1号到该月的30或31号,而无需使用琐碎的for循环:

for i in 1..Time.days_in_month(Date.today.month,Date.today.year)
  date = Date.new(y,m,i)
end

我正在得到这样的日期,但是我不应该使用这个琐碎的for循环。

zhanghaowl 回答:如何创建特定月份的日期

尽管有很多种方法可以完成此操作,但一种方法是将Ruby RangeTime#beginning_of_monthTime#end_of_month方法结合使用以生成包含所有内容的对象每月的几天,然后将其转换为数组:

(Date.today.beginning_of_month..Date.today.end_of_month).to_a
=> [Fri,01 Nov 2019,Sat,02 Nov 2019,Sun,03 Nov 2019,Mon,04 Nov 2019,Tue,05 Nov 2019,Wed,06 Nov 2019,....,Fri,29 Nov 2019,30 Nov 2019]

另一种选择是使用Time#all_month帮助程序,它很简单:

Date.today.all_month.to_a
=> [Fri,30 Nov 2019]
,

(普通的Ruby)Date类使用负数作为从末尾开始计数的一种方式(例如在数组中):

require "date"

today = Date.today
m,y  = today.month,today.year
p (Date.new(y,m,1) .. Date.new(y,-1)).to_a
本文链接:https://www.f2er.com/3158079.html

大家都在问