Ruby: 如何按年日查找日期

Ruby: how to find a date by the year day

如何根据当年的日期找到日期? 比如你有年号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 

为什么相差2天?

这应该有效(纯 ruby):

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)