我想生成一个特定月份的所有日期,从该月的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循环。
我想生成一个特定月份的所有日期,从该月的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循环。
尽管有很多种方法可以完成此操作,但一种方法是将Ruby Range
与Time#beginning_of_month
和Time#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