问题描述
如何根据当前年份的日期找到日期? 比如你有一年的第235天,它对应的是哪个日期?
例如,您可以按如下方式查找一年中的某一天:
Date.today.yday
#=> 126 (for May 6,2021)
如何实现相反的目标?
Date.some_method(126)
#=> 2021-05-06
我尝试如下:
Now = Date.today
#=> Thu,06 May 2021
start_year = Now.beginning_of_year
#=> Fri,01 Jan 2021
start.advance(days: (start.yday + 126))
#=> Sat,08 May 2021
为什么相差两天?
解决方法
这应该可以工作(纯红宝石):
def day_of_year(num)
Date.new(Date.today.year) + num - 1
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
另一种选择:
def day_of_year(num)
Date.strptime(num.to_s,"%j")
end
day_of_year(1) #=> 01/01/2021
day_of_year(235) #=> 23/08/2021
注意:@steenslag 发布了实际正确的答案 - 请去投票。
,Date.ordinal
为您提供日期、年份和数字。您甚至可以指定一个负数,这将计算从年末开始倒数的日期。 doc
试试这个。
Date.today - (Date.today.yday - 126)