Ruby:如何按年份查找日期

问题描述

如何根据当前年份的日期找到日期? 比如你有一年的第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)